时间记录:2019-11-19
问题描述: 今天在使用 quartz 开始定时任务的时候,我当时考虑到实现 job 不会给外部使用的情况下,使用了内部的私有类,然后发现其不能够进行实例化操作,然后看了下源码,发现其实通过反射的方式将类进行实例化的,然后我当时写的任务类的问题,导致了其通过反射的方式不能够实例化。
下面探索下反射的方式进行的实例化操作,为什么不行
第一部分: 私有类且没用进行无参构造函数显示创建
package com.huo;
/**
* 反射的方式初始化测试
* @author huoruilin
*/
public class TestReflection
{
public static void main(String[] args)
{
try
{
Item item = (Item)Item.class.newInstance();
}catch (IllegalAccessException | InstantiationException exception)
{
exception.printStackTrace();
}
}
private class Item
{
}
}
然后很明显的是就会报找不到其无参的构造函数,如下报错内容
java.lang.InstantiationException: com.huo.TestReflection$Item
at java.lang.Class.newInstance(Class.java:418)
at com.huo.TestReflection.main(TestReflection.java:13)
Caused by: java.lang.NoSuchMethodException: com.huo.TestReflection$Item.<init>()
at java.lang.Class.getConstructor0(Class.java:3069)
at java.lang.Class.newInstance(Class.java:403)
... 1 more
然后我们把其的无参构造函数显示的表示
private class Item
{
public Item()
{
}
}
然后依然是会报错,如下的报错
java.lang.InstantiationException: com.huo.TestReflection$Item
at java.lang.Class.newInstance(Class.java:418