Maison > Java > javaDidacticiel > Conseils pour obtenir des informations génériques au printemps

Conseils pour obtenir des informations génériques au printemps

不言
Libérer: 2019-03-27 10:24:32
avant
2743 Les gens l'ont consulté

Le contenu de cet article concerne les techniques et méthodes pour obtenir des informations génériques au printemps. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Introduction : le code source de Spring est un grand trésor. La plupart des outils que nous pouvons rencontrer se trouvent dans le code source. Par conséquent, le mica open source de l'auteur est entièrement basé sur Spring pour les améliorations de base et ne le fait pas. réinventer la roue. Ce que je veux partager aujourd'hui, c'est comment obtenir des génériques avec élégance au printemps.

Obtenez des génériques

Analysez-le vous-même

Notre méthode de traitement précédente, le code source vjtools (Jiangnan Baiyi).

/**
 * 通过反射, 获得Class定义中声明的父类的泛型参数的类型.
 * 
 * 注意泛型必须定义在父类处. 这是唯一可以通过反射从泛型获得Class实例的地方.
 * 
 * 如无法找到, 返回Object.class.
 * 
 * 如public UserDao extends HibernateDao<User,Long>
 * 
 * @param clazz clazz The class to introspect
 * @param index the Index of the generic declaration, start from 0.
 * @return the index generic declaration, or Object.class if cannot be determined
 */
public static Class getClassGenericType(final Class clazz, final int index) {

    Type genType = clazz.getGenericSuperclass();

    if (!(genType instanceof ParameterizedType)) {
        logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
        return Object.class;
    }

    Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

    if ((index >= params.length) || (index < 0)) {
        logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "&#39;s Parameterized Type: "
                + params.length);
        return Object.class;
    }
    if (!(params[index] instanceof Class)) {
        logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
        return Object.class;
    }

    return (Class) params[index];
}
Copier après la connexion

Outil ResolvableType

À partir de Spring 4.0, l'outil ResolvableType a été ajouté à Spring. Cette classe peut être utilisée pour renvoyer des informations génériques plus facilement.
Tout d'abord, jetons un œil à l'exemple officiel :

private HashMap<Integer, List<String>> myMap;

public void example() {
    ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap"));
    t.getSuperType(); // AbstractMap<Integer, List<String>>
    t.asMap(); // Map<Integer, List<String>>
    t.getGeneric(0).resolve(); // Integer
    t.getGeneric(1).resolve(); // List
    t.getGeneric(1); // List<String>
    t.resolveGeneric(1, 0); // String
}
Copier après la connexion

Description détaillée

Construction pour obtenir les informations génériques de Field

ResolvableType.forField(Field)
Copier après la connexion

Construction à obtenir les informations génériques des informations sur la méthode

ResolvableType.forMethodParameter(Method, int)
Copier après la connexion

La méthode Construction Get renvoie des informations génériques sur les paramètres

ResolvableType.forMethodReturnType(Method)
Copier après la connexion

La construction obtient les informations génériques sur les paramètres de construction

ResolvableType.forConstructorParameter(Constructor, int)
Copier après la connexion

Construction obtient les informations génériques de la classe Informations de type

ResolvableType.forClass(Class)
Copier après la connexion

Construction pour obtenir les informations génériques du type

ResolvableType.forType(Type)
Copier après la connexion

Construction pour obtenir les informations génériques de l'instance

ResolvableType.forInstance(Object)
Copier après la connexion

Pour plus d'informations sur l'utilisation de l'API, veuillez consulter la documentation Java de ResolvableType : https://docs.spring.io/spring...

Cet article est terminé ici. Pour d'autres contenus passionnants, vous pouvez. faites attention à Java sur le site Web PHP chinois Tutoriel vidéo colonne !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal