我不知道这是否可能,但我想知道的是:
假设我有一个包含2种不同类类型的数组:
Fruit[] fruit;
fruit[0]= new Banana();
fruit[1]= new Apple();
我想做的是:
Fruit unknown= new fruit[0].getClass();
我想声明一个由用户选择的类型的对象。我可以这样做吗?
答案 0 :(得分:4)
我认为用户会说他们想要一个" Apple"或者香蕉"即你将以字符串形式输入。在这种情况下,这可能就是您所需要的。
Fruit f = (Fruit) Class.forName("Banana").newInstance();
fruit[0] = f;
答案 1 :(得分:1)
不要使用反射,而应考虑使用Factory和Strategy设计模式的组合。让输入处理代码检查输入以查看他们想要什么样的东西,从而选择Factory / Strategy对象。然后,稍后,当您需要创建的对象时,请求Factory / Strategy对象创建它。
答案 2 :(得分:0)
这不是很难 - 你大部分都在那里。 newInstance()
接口上有一个名为Class
的方法,您可以像这样使用:
Fruit userFruit = (Fruit) Class.forName(input).newInstance();
(其中input
是一个包含表示用户选择的类名的String),以返回您所拥有类型的新实例。