2011-05-16 6 views

Répondre

6

Les génériques qui ont des types concrets faisant partie des déclarations (méthodes, champs, classes, arguments) sont conservés.

Ainsi, vous pouvez obtenir les types de cette déclaration

public List<String> toString(List<Foo> foos) { .. } 

Mais vous ne pouvez pas partir de ce code:

public List<E> transform(List<E> list) { 
    // E is not accessible at runtime 
} 
+0

bizarre ... donc si je suis en train de faire la distribution de la méthode d'exécution (http://stackoverflow.com/questions/6021109/java-runtime-method-resolution) alors je dois aussi m'inquiéter de cet aspect? –

+0

(n'avez-vous pas besoin d'un '' avant la 'Liste ' dans votre 2ème exemple?) –

+0

Je suppose que E fait partie de la déclaration de classe, mais il peut être dans la méthode aussi. – Bozho

1

Generics peut fonctionner par l'effacement, mais le code qui utilise vos classes compilées encore besoin d'utiliser correctement les génériques. Il y a des informations supplémentaires pour le compilateur, que vous pouvez obtenir, mais cela ne change pas son comportement d'exécution.

Questions connexes