有什么方法可以将您所在类的类型用于通用参数?例如我有这个类 ServiceNode
public final class ServiceNode<S extends NetworkService> {
private final S service;
private final Client client;
private Object attachment;
public ServiceNode(S service, Client client) {
this (service, client, null);
}
public ServiceNode(S service, Client client, Object attachment) {
this.service = service;
this.client = client;
this.attachment = attachment;
}
public S service() {
return service;
}
....
}
它是抽象类NetworkService
的一部分
public abstract class NetworkService {
private final Set<ServiceNode<?>> registeredNodes = new HashSet<>();
public final void register(ServiceNode<?> node) {
registeredNodes.add(node);
}
...
}
所以基本上是从 NetworkService
类中的 ServiceNode
中删除通配符参数,并将其替换为该类扩展的任何类型 NetworkService
最佳答案
这样泛化你的基类:
public abstract class NetworkService<T extends NetworkService<T>> {
private final Set<ServiceNode<T>> registeredNodes;
...
}
然后从中扩展:
public class MyNetworkService extends NetworkService<MyNetworkService> {
...
}
Google 奇怪地重复出现的通用模式。
关于Java 泛型 <this??>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298972/