[英]How to run the method from final class with private constructor?
如何在A类中运行方法foo()而不对此类进行任何更改
public final class A{
private A(){
System.exit(0);
}
public void foo(){
System.out.println("from foo");
}
}
没有做像使用反射或字节码操作来搞乱可访问性......
执行此操作的“正确”方法是以其他方式获取类的实例。 例如,如果存在静态工厂方法或可以访问的预制实例。 拥有这样的私有构造函数的原因是控制类的构造。 (例如,枚举实现具有私有构造函数,因此除了提供的静态构造之外,您不会创建其他实例。)
如果你支持这一点,那么有人 (你或者是原作者)做错了什么。
您可以在不调用构造函数的情况下创建类的实例。 看到这个问题: 是否可以在不调用构造函数的情况下在Java中创建对象的实例?
您可以使用objenesis为您执行此操作。 一旦你有一个A
的实例而没有调用构造函数,调用foo
很容易。
您可以在jvm加载之前更改字节代码。 这是一个可以开始的地方: http : //www.ibm.com/developerworks/java/library/j-dyn0916/index.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.