Quelle est la différence entre la catégorie de "Classe" et la classe "Type" en java?


J'ai lu cette question SO qui parle de la différence entre les classes et les types en java

Cependant, cela parle des classes déclarées avec le mot-clé class plutôt que de la classe réelle Class en java. En Java, je peux avoir un Class<T> où T est un type de classe/interface/tableau (et pour les primitives, T serait la classe autoboxed, mais l'instance de Class<T> serait associée au type primitif, tel que int.classe). Point est, Class est utilisé avec plus que des types de classe.

Quelle est la différence entre la classeClass et l'interface Type? Quand utiliserais-je jamais Type dans un programme java?

Author: Mario Ishac, 2018-12-26

1 answers

Type est une superinterface de Class. Vous n'aurez généralement pas besoin de l'utiliser sauf si vous faites de la réflexion avec des types génériques.

, Comme un exemple, nous pouvons obtenir le type d'un champ à l'aide de Field.getType():

Class<?> c =
    String.class.getField("CASE_INSENSITIVE_ORDER")
        .getType();

Le problème est que String.CASE_INSENSITIVE_ORDER est en fait un Comparator<String>, et le code ci-dessus ne nous Comparator.class. Cela ne fonctionne pas pour nous si nous avions besoin de savoir quel était l'argument de type.

Type et ses utilisations ont été ajoutées dans Java 1.5 (avec les génériques) pour ce type de situation. Nous pourrions plutôt utiliser la méthode Field.getGenericType():

Type t =
    String.class.getField("CASE_INSENSITIVE_ORDER")
        .getGenericType();

Dans ce cas, il renverrait une instance de ParameterizedType, avec Comparator.class comme type brut et {[13] } dans ses arguments de type:

ParameterizedType pt = (ParameterizedType) t;
pt.getRawType(); // interface java.util.Comparator
pt.getActualTypeArguments(); // [class java.lang.String]

Cette partie de l'API n'est pas très bien développée, mais il y en a de meilleures construites autour, comme Guava TypeToken.

 3
Author: Radiodef, 2018-12-26 00:44:25