关于反射时获取构造函数报NoSuchMethodException错误的问题
来源:5-6 无视反射和序列化攻击的单例

慕沐3053333
2021-01-20
如下是示例代码
package demo.pattern.singleton;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class EnumStarvingSingleton {
private EnumStarvingSingleton(){}
public static EnumStarvingSingleton getInstance(){
return ContainerHolder.HOLDER.instance;
}
private enum ContainerHolder{
HOLDER;
private EnumStarvingSingleton instance;
ContainerHolder(){
instance = new EnumStarvingSingleton();
}
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<ContainerHolder> clazz = ContainerHolder.class;
Constructor<ContainerHolder> constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
ContainerHolder newInstance = constructor.newInstance();
}
}
我的问题是:
ContainerHolder枚举类不是有一个无参的构造函数吗?
ContainerHolder(){
instance = new EnumStarvingSingleton();
}
那为什么下面这行代码获取不到对应的构造函数呢?
Constructor<ContainerHolder> constructor = clazz.getDeclaredConstructor();
写回答
1回答
-
翔仔
2021-01-20
没太明白同学的意思,可以提供下证明,证明为什么获取不到构造函数。这里主要是没法获取里面的ContainerHolder.HOLDER.instance 从而保证 ContainerHolder.HOLDER.instance的唯一
032021-01-21
相似问题