question que ci-dessus, désolé c'est probablement un doublon mais je n'arrivais pas à trouver un exemple avec l' <?>
sur la fin.
Pourquoi ne pas simplement utiliser Class
comme paramètre?
question que ci-dessus, désolé c'est probablement un doublon mais je n'arrivais pas à trouver un exemple avec l' <?>
sur la fin.
Pourquoi ne pas simplement utiliser Class
comme paramètre?
Class
est un paramétrable classe, par conséquent, vous pouvez utiliser la syntaxe Class<T>
où T est un type. En écrivant Class<?>
, vous êtes déclarant Class
objet qui peut être de tout type (?
est un générique). L' Class
type est un type qui contient des meta-information à propos d'une classe.
Il est toujours préférable de se référer à un type générique en spécifiant son type spécifique, en utilisant Class<?>
vous êtes le respect de cette pratique (vous en êtes conscient, Class
à être paramétrable), mais vous n'êtes pas restreindre votre paramètre d'avoir un type spécifique.
Référence à propos des Génériques et des caractères génériques: http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
Référence à propos de la Classe de l'objet et de la réflexion (la fonctionnalité de Java langage utilisé pour l'introspection lui-même): http://java.sun.com/developer/technicalArticles/ALT/Reflection/
Cette <?>
est une bête. Cela conduit souvent à des confusions et d'erreurs, parce que, quand on le voit d'abord, puis vous commencez à y croire, <?>
est un caractère générique pour tout type java. Qui est .. pas vrai. <?>
est le type inconnu, une légère et méchante différence.
Ce n'est pas un problème lorsque vous l'utilisez avec Class
. Les deux lignes de travail et de compiler:
Class anyType = String.class;
Class <?> theUnknownType = String.class;
Mais si nous commençons à utiliser avec les collections, puis nous voyons étrange compile-time erreurs:
List<?> list = new ArrayList<Object>(); // ArrayList<?> is not allowed
list.add("a String"); // doesn't compile ...
Notre List<?>
n'est pas une collection, qui est approprié pour n'importe quel type d'objet. Il ne peut stocker qu'un seul type: la mystique "type inconnu". Ce qui n'est pas un vrai type, pour sûr.
Cela signifie que votre Classe de référence peut contenir une référence à un objet de Classe.
C'est essentiellement le même comme "Classe" mais vous êtes à la montrer à d'autres personnes qui lisent votre code que vous n'avez pas oublier les génériques, vous voulez juste une référence qui peut contenir n'importe quelle Classe de l'objet.
Bruce Eckel, Penser en Java:
En Java SE5, la Classe est préférables de Classe, même si elles sont équivalentes et la plaine de la Classe, comme vous l'avez vu, n'est pas de produire un avertissement du compilateur. L'avantage de la Classe, c'est qu'il indique que vous n'êtes pas simplement en utilisant un non-spécifique à la classe de référence par accident, ou de l'ignorance. Vous avez choisi la version.
C'est un des génériques littérale. Cela signifie que vous ne connaissez pas le type de classe de cette Class
, l'instance de représentation, mais vous êtes toujours à l'aide de la version générique.
Class<Foo>
. De cette façon, vous pouvez créer une nouvelle instance, par exemple, sans casting: Foo foo = clazz.newInstance();
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.