问题是:我有一个只有私有构造函数的类(而且我无法修改它的源代码),但我需要扩展它。
由于反射允许我们在需要时创建这些类的实例(通过获取构造函数并调用newInstance()),因此是否有任何方法可以创建这种类的扩展版本的实例(我的意思是,真正的任何方式,即使违背OOP)?
我知道这是一种不好的做法,但看起来我别无选择:我需要拦截对一个类的一些调用(它是单例,而且它不是接口实现,所以动态代理在这里不起作用)。
最小示例(如请求):
由于反射允许我们在需要时创建这些类的实例(通过获取构造函数并调用newInstance()),因此是否有任何方法可以创建这种类的扩展版本的实例(我的意思是,真正的任何方式,即使违背OOP)?
我知道这是一种不好的做法,但看起来我别无选择:我需要拦截对一个类的一些调用(它是单例,而且它不是接口实现,所以动态代理在这里不起作用)。
最小示例(如请求):
public class Singleton {
static private Singleton instance;
private Singleton() {
}
public static Singleton getFactory() {
if (instance == null)
instance = new Singleton();
return instance;
}
public void doWork(String arg) {
System.out.println(arg);
}}
我想做的只是构建自己的包装器(像这个一样)
class Extension extends Singleton {
@Override
public void doWork(String arg) {
super.doWork("Processed: " + arg);
}}
然后使用反射将其注入到工厂中:
Singleton.class.getField("instance").set(null, new Extension());
但是我没有看到任何构建这样对象的方式,因为其超类的构造函数是私有的。问题是“这是否可能。”