有没有办法在不知道其类型的情况下实例化一个类,直到运行时并且不使用反射?
如果我希望实例化的所有类扩展相同的抽象类或实现相同的接口,这似乎是一个合理的请求。但是,因为即使它们不能对这些类强制执行构造函数,我也无法想办法。
答案 0 :(得分:1)
没有。首先创建反射的部分原因是为了使它能够在运行时实例化类而不事先知道它的类型。
你听起来像是在问这样的事情,其中$ CLASS是在运行时定义的包的名称:
eval {
require "$CLASS";
};
die $@ if $@;
$newObj = $CLASS->new();
嗯,伙计,这就是为什么Sun增加了反思......
答案 1 :(得分:1)
您描述的情况无法解决,但您可能正在寻找类似Factory模式的内容。
答案 2 :(得分:0)
Java service可能会提供您要查找的内容。 (参见ServiceLoader javadoc。)
答案 3 :(得分:0)
我想如果您事先知道类的名称,那么您可以使用模拟类。
public class MySquareClass { public String methods ( ) { throw new RuntimeException ( ) ; }
public class MyCircleClass { ... stub methods ... }
...
您可以在代码中使用它们,编译器不会知道它们不是“真正的实现”。一定要用运行时代替实际的实现。