Heim > Java > javaLernprogramm > Tipps zum Erhalten allgemeiner Informationen im Frühjahr

Tipps zum Erhalten allgemeiner Informationen im Frühjahr

不言
Freigeben: 2019-03-27 10:24:32
nach vorne
2743 Leute haben es durchsucht

In diesem Artikel geht es um die Techniken und Methoden zum Erhalten allgemeiner Informationen im Frühjahr. Ich hoffe, dass er für Freunde in Not hilfreich ist.

Einführung: Der Spring-Quellcode ist eine große Schatzkammer, die wir im Quellcode finden können. Daher basiert der Open-Source-Mica des Autors für grundlegende Verbesserungen vollständig auf Spring das Rad neu erfinden. Was ich heute mit Ihnen teilen möchte, ist, wie Sie im Frühling elegant an Generika kommen.

Generika erhalten

Parsen Sie es selbst

Unsere vorherige Verarbeitungsmethode, Codequelle 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];
}
Nach dem Login kopieren

ResolvableType-Tool

Ab Spring 4.0 wurde das ResolvableType-Tool zu Spring hinzugefügt. Diese Klasse kann verwendet werden, um allgemeine Informationen bequemer zurückzugeben.
Werfen wir zunächst einen Blick auf das offizielle Beispiel:

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
}
Nach dem Login kopieren

Detaillierte Beschreibung

Konstruktion zum Erhalten der generischen Informationen von Field

ResolvableType.forField(Field)
Nach dem Login kopieren

Konstruktion zum Erhalten der generischen Informationen of Method

ResolvableType.forMethodParameter(Method, int)
Nach dem Login kopieren

Construction-Erfassungsmethode gibt die generischen Informationen des Parameters zurück

ResolvableType.forMethodReturnType(Method)
Nach dem Login kopieren

Construction erhält die generischen Informationen des Konstruktionsparameters

ResolvableType.forConstructorParameter(Constructor, int)
Nach dem Login kopieren

Construction erhält die generischen Informationen der Klasse

ResolvableType.forClass(Class)
Nach dem Login kopieren

Konstruktion Holen Sie sich die generischen Informationen des Typs

ResolvableType.forType(Type)
Nach dem Login kopieren

Konstruktion, um die generischen Informationen der Instanz zu erhalten

ResolvableType.forInstance(Object)
Nach dem Login kopieren

Weitere Informationen zur Verwendung der API finden Sie unter ResolvableType Java doc: https://docs.spring.io/spring ..

Dieser Artikel ist hier zu Ende. Weitere spannende Inhalte finden Sie in der Spalte Java-Video-Tutorial die chinesische PHP-Website!

Das obige ist der detaillierte Inhalt vonTipps zum Erhalten allgemeiner Informationen im Frühjahr. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage