Java 反射

作者: KuTear | 来源:发表于2016-01-01 22:30 被阅读376次

    layout: post
    title: Java 反射
    date: 2015-10-20
    categories: blog
    tags: [Java,反射]
    category: Java
    description: 本文简单的介绍java下的反射调用


    在解析json成Bean对象的时候经常使用反射与注解
    今天在写的过程中遇到一个小的错误

    public class Test {
       public class InnerClass{
         //.....
       }
    }
    

    在实例化InnerClass的时候是通过反射

    try {
        Class cls = Class.forName("Test$InnerClass");
        Test.InnerClass instance = (Test.InnerClass) cls.newInstance();
       } catch (Exception e) {
          e.printStackTrace();
       }
    }
    

    然后就报了错误

    java.lang.InstantiationException: Test$InnerClass
    at java.lang.Class.newInstance(Class.java:418)
    at Main.main(Main.java:5)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
    Caused by: java.lang.NoSuchMethodException: Test$InnerClass.<init>()
    at java.lang.Class.getConstructor0(Class.java:2971)
    at java.lang.Class.newInstance(Class.java:403)
    ... 6 more
    

    因为非静态内部类的实例化必须是在外部类的基础之上

    Test t = new Test();
    Test.InnerClass innerClass = t.new InnerClass();
    

    在没有外部类的实例的情况下是没办法实例化内部类的,如想直接实例化内部类就把内部类改为静态内部类

    相关文章

      网友评论

        本文标题:Java 反射

        本文链接:https://www.haomeiwen.com/subject/anrwhttx.html