6

私は抽象ジェネリッククラスを持っています:

public abstract class AbstractMessageHandler<T extends AbstractMessageHandler>
{
    public abstract List<String> getTypesOfMessages();
    public abstract void handleMessage(String message, CometClient client);

    public T setResponseValues(AbstractMessage request, T response )
    {
        response.setCompanyId(request.getCompanyId());
        response.setMessageGroup(request.getMessageGroup());
        response.setUserId(request.getUserId());
        response.setTimeStamp(AbstractMessage.getCurrentTimeStamp());

        return response;
    }
}

このクラスのサブクラスになるジェネリック サブクラスが必要です。つまり、ジェネリックは AbstractMessageHandler のサブクラスでなければなりません。ただし、これによりコンパイルの問題が発生します。誰かが私が間違っていることを教えてもらえますか?

ありがとう

4

3 に答える 3

8

Enum クラスの例に従う必要があります。

public abstract class AbstractMessageHandler<T extends AbstractMessageHandler<T>>
于 2012-09-27T19:01:16.497 に答える
0

一般的な定義では、次のことができます<T extends SomeClass>

例えば:

abstract class Processor<T extends String> {
    abstract T process();
}

あなたの場合、 ではなく、いくつかのクラスTを拡張する必要があるように見えます。ResponseAbstractMessageHandler

于 2012-09-27T18:55:08.263 に答える
0

与えられたコードから、クラスをジェネリックにする必要はないようです。代わりにジェネリック メソッドはどうですか (現在のオブジェクトをまったく使用する必要がないように思われるため、静的にしました)。

public abstract class AbstractMessageHandler
{
    public static <T extends AbstractMessageHandler> T setResponseValues(AbstractMessage request, T response )
    {
        response.setCompanyId(request.getCompanyId());
        response.setMessageGroup(request.getMessageGroup());
        response.setUserId(request.getUserId());
        response.setTimeStamp(AbstractMessage.getCurrentTimeStamp());

        return response;
    }
}

または、現在のオブジェクトで動作する AbstractMessageHandler のメソッドを定義するだけです。次に、この静的メソッドは必要ありません。また、常に返すこの奇妙なパラメーターもありません。

public abstract class AbstractMessageHandler
{
    public void setResponseValues(AbstractMessage request)
    {
        setCompanyId(request.getCompanyId());
        setMessageGroup(request.getMessageGroup());
        setUserId(request.getUserId());
        setTimeStamp(AbstractMessage.getCurrentTimeStamp());
    }
}
于 2012-09-28T01:29:06.860 に答える