Java 杂谈

Java 反射

2016-01-01  本文已影响376人  KuTear

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();

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

上一篇 下一篇

猜你喜欢

热点阅读