2013-01-12 55 views
5

有没有什么办法可以使用您所在的类的类型作为泛型参数?比如我有这个类ServiceNodeJava泛型<this??>

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); 
    } 

    ... 

} 

所以基本上是有反正从ServiceNodeNetworkService类中删除通配符参数,将其替换为无论类别正在扩展NetworkService

+4

不,没有。 –

+0

如果我可能会问 - 为什么要让一个具体的类在外部类中依赖“类型明智的”? – fge

回答

16

通过以下方式使您的基类具有通用性:

public abstract class NetworkService<T extends NetworkService<T>> { 

    private final Set<ServiceNode<T>> registeredNodes; 

    ... 
} 

,然后从中从而延长:

public class MyNetworkService extends NetworkService<MyNetworkService> { 
    ... 
} 

谷歌为好奇经常性的通用模式