据我所知,我想要做的事(标题)是不可能的。 但是,这里有3个小样本的代码 - 第一个是我现在所拥有的,第二个是我想要的,第三个是实现它的一种方法,我不想使用到期的反思。我想知道是否有办法重构我的代码以接近第二个示例。 有几个假设:在这里使用的每个类只有一个构造函数,并且确切知道它需要什么对象。对象[]是因为我不知道在运行时的一切。实例化类对象而不使用反射
1.
Object o; Object[] params; String myString;
switch(myString){
case "ClassA": o = new ClassA(params);
case "ClassB": o = new ClassB(params);
//ETC
}
2.
Object o; Object[] params; String myString;
HashMap<String, Class<?>> map;
o = new map.get(myString)(params); //Obviously doesnt work
3.
Object o; Object[] params; String myString;
HashMap<String, Class<?>> map;
o = map.get(myString).getConstructors()[0].newInstance(params);
注意,事实上,我以上骗。我现在所拥有的不是1
,而是3
。我不能有1
,因为我无法硬编码所有类名。但我想有2
。有什么建议么?
一些澄清:
HashMap的例子中和2
包含3
对类名的字符串表示,和实际的类的对象。 (很明显),这意味着我知道在执行上面的代码之前我想要实例化的所有可能的类,但是我无法对它们中的任何一个进行硬编码:它们由文件加载。
为什么你想要它? map中有什么? –
使用反射实例化,但没有反射使用是复杂的。 – davidxxx
如果你不能硬编码所有的类名,你也不能有'2'或所有的字符串从哪里来?还是这是一个误解,你至少知道代码中的某一点可能使用了所有类(ClassA,ClassB ...)? –