Open Joldnine opened 6 years ago
Java的反射机制 (Java Reflection)可以在Runtime阶段得到Java对象的信息。网上有很多实用教程,比如说 Java Reflection Example Tutorial。
前段时间遇到一个有趣的问题:在runtime判断某个class里所有field的type,其中难点在于判断某个field是否为泛型(generic type)或者对象(java.lang.Object)。针对此难点特此记录。
思路如下:
class<?>
getDeclaredFields()
field.getType().equals(Object.class)
java.lang.Object
field.getGenericType() instanceof TypeVariable
完整代码如下:
try { for (Field field : clazz.getDeclaredFields()) { try { if (field.getType().equals(Object.class)) { if (field.getGenericType() instanceof TypeVariable) { System.out.println("Class: '%s' has generic type field: '%s'", clazz.getName(), field.getName(); } else { System.out.println("Class: '%s' has Object type field: '%s'", clazz.getName(), field.getName(); } } } catch (TypeNotPresentException e) { // do something } } } catch (NoClassDefFoundError) { // do something }
Java的反射机制 (Java Reflection)可以在Runtime阶段得到Java对象的信息。网上有很多实用教程,比如说 Java Reflection Example Tutorial。
前段时间遇到一个有趣的问题:在runtime判断某个class里所有field的type,其中难点在于判断某个field是否为泛型(generic type)或者对象(java.lang.Object)。针对此难点特此记录。
思路如下:
class<?>
对象getDeclaredFields()
方法拿到fieldsfield.getType().equals(Object.class)
判断是否为java.lang.Object
field.getGenericType() instanceof TypeVariable
判断是否为泛型。 注:在JVM里,泛型会是java.lang.Object
,所以在这里需要进一步判断。完整代码如下: