2013-01-12 12 views
5

C'è un modo per utilizzare un tipo di classe per un argomento generico? Per esempio io ho questa classe ServiceNodeJava Generics <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; 
    } 

.... 

} 

che è una parte della classe astratta NetworkService

public abstract class NetworkService { 

    private final Set<ServiceNode<?>> registeredNodes = new HashSet<>(); 

    public final void register(ServiceNode<?> node) { 
     registeredNodes.add(node); 
    } 

    ... 

} 

Quindi, in pratica c'è comunque per rimuovere l'argomento jolly dal ServiceNode nella classe NetworkService e sostituirlo con qualsiasi tipo di estensione della classe NetworkService

+4

No, non c'è. –

+0

Se posso chiedere: perché una classe concreta dipende "dal punto di vista del saggio" sulla sua classe esterna? – fge

risposta

16

Generare la classe base in questo modo:

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

    private final Set<ServiceNode<T>> registeredNodes; 

    ... 
} 

e quindi estendere da così:

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

Google per curiosamente ricorrenti modello generico.