2009-12-05 12 views
0

Donc j'essaye de faire un type paramétré qui fonctionnera pour anytype en Java cela inclut tout ce qui est un objet, ainsi que les types de primitives. Comment ferais-je cela?Faire un type paramétré générique de n'importe quoi

Ok, je veux suppose que la cible d'un for-each pour être une primitive, de sorte que son

for (int i: MyClass)

quelque chose comme ça. Est-ce possible?

Répondre

1
public MyClass<E> 

il ne comprend pas les types primitifs, à dire que vous ne pouvez pas déclarer MyClass<int> myobj;, mais vous pouvez utiliser les emballages (java.lang.Integer, etc.)

+0

je l'ai essayé et cela n'a pas fonctionné. Ce que j'aurais dû dire, c'est que j'essaie de faire une interface générique. L'interface est itérable. – ProxyProtocol

+0

ah, donc ce n'est pas votre classe, mais une existante. Eh bien, Iterable est générique, alors qu'est-ce qui ne fonctionne pas? Utilisez-vous Java 1.5+? – Bozho

4

allant de votre commentaire sur la réponse de Bozho, vous voulez probablement quelque chose comme ceci:

interface MyInterface<T> extends Iterable<T> { 
} 

et non, vous ne pouvez pas faire cela pour les types primitifs. Vous pouvez simuler un itérateur pour un type primitif, mais il ne sera jamais vraiment itérable, comme dans, utilisable dans une boucle for-each.

+0

'T' ne peut pas être un type primitif. –

+1

bien, il s'est référé à ma réponse où les problèmes de primitives est expliqué. – Bozho

+0

Ok, supposons que je veuille que la cible d'un for-each soit une primitive, donc c'est pour (int i: MyClass) quelque chose comme ça. Est-ce possible? – ProxyProtocol

2

Il se peut que je manque quelque chose, mais pourquoi ne pas simplement implémenter Iterable<T>?

+1

c'est la question, plutôt que vous, qui manque quelque chose – Bozho

1

Vous ne pouvez pas faire ce genre de chose, utilement, pour les types primitifs. Si vous êtes 'chanceux', vous obtenez un autoboxing maléfique, et si vous êtes malchanceux, vous pourriez obtenir des protestations du compilateur. Si vous regardez GNU Trove ou Apache Commons Primitives, vous verrez l'univers parallèle qui résulte du désir de faire l'équivalent de l'infrastructure de collections sur les types primitifs. Je suppose que si vous êtes sûr que la surcharge de l'autoboxing est acceptable pour vous, cela peut sembler logique, mais je ne peux pas oublier ma tendance à le trouver révoltant.

0

Cela devrait fonctionner, mais je soupçonne que ce n'est pas ce que vous êtes vraiment après ...

final List< Integer> list; 

... 

for(final int i : list) 
{ 
} 
bien
Questions connexes