繁体   English   中英

如何使用私有构造函数从final类运行该方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM