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应该扩展一些Response类,而不是AbstractMessageHandler.

于 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 回答