2009-12-16 6 views
0

Actuellement je travaille sur une interface de service qui récupère des objets de domaine basés sur une clé primaire. Cependant, j'ai l'impression que je n'utilise pas efficacement les génériques.java génériques génériques

objets de domaine de base se présenter comme suit:

public interface DomainObject<PK extends Serializable> extends Serializable { 
    PK getID(); 
} 

Mon interface de service se présente comme suit:

public interface LoadService<T extends DomainObject<PK>, PK extends Serializable> { 
    T load(PK ID); 
} 

Cela fonctionne, mais je dois préciser le type de PK dans les génériques de service, même si le type de PK est déjà connu à l'intérieur de T. Y at-il moyen de contourner le fait de devoir définir à nouveau mon PK dans l'interface LoadService? Quelque chose comme:

LoadService<T extends DomainObject<? extends Serializable as PK> { ... } 

aide sera grandement appréciée!

Répondre

0

Essayez d'utiliser des bornes multiples pour le paramètre de type, si T deux étend DomainObject et met en œuvre Serializable:

interface LoadService<T extends DomainObject<T> & Serializable> { 
} 
+0

Essayez? Où est l'explication? – BalusC

1

Il n'y a aucun moyen d'éviter que parce que vous utilisez la classe PK au « LoadService ». Je veux dire que vous pouvez définir le service comme

interface LoadService<T extends DomainObject<?>> { 
    void store(T data); 
} 

Cependant, ce n'est pas l'option si vous utilisez la classe PK, car compilateur vérifie ce type PK est compatible avec le type d'objet de domaine.

Une autre option est de supprimer le paramètre de type de DomainObject, à savoir procédez comme suit:

interface DomainObject extends Serializable { 
    Serializable getID(); 
}