资讯专栏INFORMATION COLUMN

Java的Reflect记录

suxier / 1833人阅读

摘要:日常记录作者对于的内部类,我们注意的表达方法,其原因是内部类编译后是文件。代码如下同时,我们也可以通过的方法,来获得指定类中的所有子类。在下面的代码中,可以在输出中获得子类的,如,也验证了上面的的写法。代码如下接着来看一下中的。

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类来实现某些应用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69949.html

相关文章

  • Idea 搭建SSH 架构

    摘要:这几天在学习中的架构开始搭建时候遇到很多问题经过几天的探索记录一下的搭建一使用创建新项目选择相关相关相关选择完成后二在项目目录下创建和文件夹将相关的包导入项目三依赖包四调整项目依赖路径选择放包的文件夹点击然后四配置五测试修改报错运行项 这几天在学习java web中的SSh架构,开始搭建时候遇到很多问题,经过几天的探索,记录一下SSH 的搭建 一.使用Idea创建新项目 1.选择Sp...

    syoya 评论0 收藏0
  • 反射机制与原理笔记

    反射机制与原理笔记 声明 文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall 反射机制 反射:当程序无法获知对象类型时,在运行期间动态获取类的所有属性和方法,这种动态获取类信息和动态调用对象方法的功能称为反射机制;反射机制实现:Class类与java.lang.reflect类库一起实现机制,java.lang.reflect类库包含Field...

    fobnn 评论0 收藏0
  • UnsupportedOperationException

    摘要:本周在写单元测试的时候遇见了一个新的,在此记录一下。通过查看的源码果然是这样没有重写的但为什么会调用方法呢 本周在写单元测试的时候遇见了一个新的exception,在此记录一下。 单元测试中有一段代码是这样的: logger.debug(设置班级的学生); klass.setStudentList(Collections.singletonList(student1)); ...

    LiangJ 评论0 收藏0
  • Java动态代理之InvocationHandler最简单入门教程

    摘要:网上关于的动态代理,和这些概念有讲解得非常高深的文章。现在咱们通过一个最简单的例子认识什么是。创建一个简单的类,实现这个接口。看看用如何优雅实现吧希望这个例子能让大家对的动态代理之有了最基本的了解。 网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章。其实这些概念没有那么复杂。现在咱们通过一个最简单的例子认识什么是Invocatio...

    lingdududu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<