Java Generics <this ??>

use*_*226 5 java

有什么方法可以使用你所使用的类的类型来进行泛型参数吗?例如,我有这个班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)

所以基本上是反正有从删除通配符参数ServiceNodeNetworkService类,并与任何类型的类扩展更换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)

谷歌奇怪地反复出现通用模式.