我有一个抽象的泛型类:
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的子类。然而,这给了我编译问题。谁能让我知道我做错了什么?
由于
答案 0 :(得分:8)
您需要遵循Enum类的示例:
public abstract class AbstractMessageHandler<T extends AbstractMessageHandler<T>>
答案 1 :(得分:0)
在通用定义中,您可以执行<T extends SomeClass>
例如:
abstract class Processor<T extends String> {
abstract T process();
}
在您的情况下,似乎T
应该扩展某些Response
类,而不是AbstractMessageHandler
。
答案 2 :(得分: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());
}
}