有什么方法可以使用你所使用的类的类型来进行泛型参数吗?例如,我有这个班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;
}
....
}
Run Code Online (Sandbox Code Playgroud)
这是抽象类的一部分 NetworkService
public abstract class NetworkService {
private final Set<ServiceNode<?>> registeredNodes = new HashSet<>();
public final void register(ServiceNode<?> node) {
registeredNodes.add(node);
}
...
}
Run Code Online (Sandbox Code Playgroud)
所以基本上是反正有从删除通配符参数ServiceNode的NetworkService类,并与任何类型的类扩展更换NetworkService
Oli*_*rth 16
因此,对您的基类进行通用化:
public abstract class NetworkService<T extends NetworkService<T>> {
private final Set<ServiceNode<T>> registeredNodes;
...
}
Run Code Online (Sandbox Code Playgroud)
然后从它延伸:
public class MyNetworkService extends NetworkService<MyNetworkService> {
...
}
Run Code Online (Sandbox Code Playgroud)
谷歌奇怪地反复出现通用模式.