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

时间:2012-02-02 19:44:18

标签: java

如何在A类中运行方法foo()而不对此类进行任何更改

public final class A{

    private A(){
        System.exit(0);
    }
    public void foo(){

        System.out.println("from foo");
    }

}

3 个答案:

答案 0 :(得分:1)

没有像使用反射或字节码操作那样搞乱可访问性......

执行此操作的“正确”方法是以其他方式获取类的实例。例如,如果存在静态工厂方法或可以访问的预制实例。拥有这样的私有构造函数的原因是控制类的构造。 (例如,枚举实现具有私有构造函数,因此除了提供的静态构造之外,您不会创建其他实例。)

如果你支持这一点,那么某人(无论是你或原作者)都做错了。

答案 1 :(得分:1)

您可以在不调用构造函数的情况下创建类的实例。请参阅此问题:Is it possible to create an instance of an object in Java without calling the constructor?

您可以使用objenesis为您执行此操作。在没有调用构造函数的情况下获得A的实例后,调用foo很容易。

答案 2 :(得分:0)

您可以在jvm加载之前更改字节代码。这是一个开始的地方: http://www.ibm.com/developerworks/java/library/j-dyn0916/index.html