Question

Je ne sais pas comment donner ce un meilleur titre que je ne sais pas vraiment ce que ce modèle est appelé en Java.

En ce moment j'ai une méthode avec cette signature:

public Directory getDirectory(Class<? extends Directory> type) { ... }

Et vous l'appelez comme ceci:

MyDirectory directory = (MyDirectory)getDirectory(MyDirectory.class);

La contrainte du type garantit que MyDirectory doit provenir de Directory.

Ce que je veux vraiment faire est d'éviter la distribution et de réduire la quantité de code nécessaire. En C #, vous pouvez dire:

MyDirectory directory = getDirectory<MyDirectory>();

Est-il possible de le faire ou quelque chose de similaire à Java? Je n'ai pas codé toute Java depuis la version 1.4!

Était-ce utile?

La solution

public <T extends Directory> T getDirectory(Class<T> type) { ... }

MyDirectory directory = getDirectory(MyDirectory.class);

Autres conseils

Eh bien, vous pouvez éviter la distribution en changeant la méthode elle-même être générique:

public <T extends Directory> T getDirectory(Class<T> type)

et

MyDirectory directory = getDirectory(MyDirectory.class);

Ici, vous utilisez l'inférence de type de l'argument pour déterminer le type de T.

Mais vous ne devez passer le Class<T> dans, comme le type sinon l'effacement se mettra en marche et la méthode ne saura pas le type de créer une instance de: (

Pour plus de détails sur l'effacement de type et à peu près tout le reste à faire avec Java génériques, voir de Angelika Langer Java Generics FAQ .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top