Java的Reflect记录

发布时间:2019-11-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java的Reflect记录脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Java 日常 记录 作者: LinkSystem Java 2017/04/27

对于Java的内部类,我们注意ClassName的表达方法:package.Classname$InnerClass
原因是内部类编译后是classname$InnerClass.class文件。

代码如下

public class ReflectExplain {      static class Node{         public double i;         public int    x;          public Node() {         }          public Node(double i, int x) {             this.i = i;             this.x = x;         }     }      public static void main(String args[]) throws Exception {         String name = "com.link.core.reflect.ReflectExplain$Node";         Class clazz = Class.forName(name);         System.out.PRintln(clazz);     } }

同时,我们也可以通过ClassgetDeclaredClasses方法,来获得指定类中的所有子类。在下面的代码中,可以在输出中获得子类的ClassName,如 com.link.core.reflect.ReflectExplain$Node, 也验证了上面的ClassName的写法。

代码如下

public class ReflectExplain {      static class Node{         public double i;         public int    x;          public Node() {         }          public Node(double i, int x) {             this.i = i;             this.x = x;         }     }      public static void main(String args[]) throws Exception {         String name = "com.link.core.reflect.ReflectExplain";         Class clazz = Class.forName(name);         Class[] clazzes = clazz.getDeclaredClasses();         for (Class object : clazzes){             System.out.println(object);         }     } }

接着来看一下java.lang.reflect中的Modifier。在Class中有getModifiers()这一方法,其返回值是int值,在Class类中是这样描述的

Returns the Java language modifiers for this class or interface, encoded in an integer.
The modifiers consist of the Java Virtual Machine's constants for {@code public}, {@code protected}, {@code private}, {@code final}, {@code static}, {@code abstract} and {@code interface}; they should be decoded using the methods of class {@code Modifier}.

大致的意思是每一个修饰符都有一个对应的int值,在可以在Modifier类中匹配,所以可以
Modifier类中的方法,可见其中有 is() 的方法和toString()的方法,以下是is()的代码和toString()的代码:

    public static final int PUBLIC = 0x00000001;          public static boolean isPublic(int mod) {         return (mod & PUBLIC) != 0;     }
    public static String toString(int mod) {         StringBuilder sb = new StringBuilder();         int len;          if ((mod & PUBLIC) != 0)        sb.apPEnd("public ");         if ((mod & PROTECTED) != 0)     sb.append("protected ");         if ((mod & PRIVATE) != 0)       sb.append("private ");          /* canonical order */         if ((mod & ABSTRACT) != 0)      sb.append("abstract ");         if ((mod & STATIC) != 0)        sb.append("static ");         if ((mod & FINAL) != 0)         sb.append("final ");         if ((mod & TRANSIENT) != 0)     sb.append("transient ");         if ((mod & VOLATILE) != 0)      sb.append("volatile ");         if ((mod & SYNCHRONIZED) != 0)  sb.append("synchronized ");         if ((mod & NATIVE) != 0)        sb.append("native ");         if ((mod & STRICT) != 0)        sb.append("strictfp ");         if ((mod & INTERFACE) != 0)     sb.append("interface ");          if ((len = sb.length()) > 0)    /* trim trailing space */             return sb.toString().substring(0, len-1);         return "";     }

可见其原理都是一致的,通过与方式来判断是否为零,来返回相应的值。那么我们可以Modified类来实现某些应用。

脚本宝典总结

以上是脚本宝典为你收集整理的Java的Reflect记录全部内容,希望文章能够帮你解决Java的Reflect记录所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。