2016-03-27 38 views
1

我不知道这是可能的,但我想知道的是以下几点:Java的声明由用户选择的类型的对象

比方说,我有一个包含2数组不同类类型:

Fruit[] fruit; 
fruit[0]= new Banana(); 
fruit[1]= new Apple(); 

我想要做的是这样的:

Fruit unknown= new fruit[0].getClass(); 

我要声明这是由用户选择的类型的对象。我可以做吗?

+0

研究Java“反思”。如果你真的需要做动态编程(这就是你的问题所暗示的),那么Java可能不是正确的语言。 –

+0

这是完全可能的,并不难。谷歌Java反射 –

+0

另请参见http://stackoverflow.com/q/36272566/3888450 –

回答

0

这不是非常困难 - 你大部分都是在那里。有一个在Class界面,您可以使用这样的所谓newInstance()方法:

Fruit userFruit = (Fruit) Class.forName(input).newInstance(); 

(其中input是包含代表用户的选择一类名称的String)返回你的类型的新实例。

+0

我已经完全搞砸了我的答案,但它被'接受',所以我从下面偷了亚当赖斯的答案只是为了让我的权利为未来的读者。亚当值得这个代表,但我不知道如何给他。 –

+0

哦,但实际上我只是需要知道函数newInstance(),因为你是我第一次接受你的函数。 – Christian

+1

是的,但是对于未来的读者来说也是如此,所以应该尽可能的正确。 –

4

我假设用户会说他们想要一个“苹果”或“香蕉”,即你会得到输入作为一个字符串。在这种情况下,这可能是你需要的。

Fruit f = (Fruit) Class.forName("Banana").newInstance(); 
    fruit[0] = f; 
+0

嘿亚当,我偷了你的答案,对不起。我已经通过查找您在SO上发布的其他帖子并提出了很好的帖子来弥补了代表的不足。 –

+0

谢谢,我很感激。 –

1

而不是使用反射,考虑使用工厂和策略设计模式的组合。让输入处理代码检查输入以查看他们想要的东西,然后选择一个工厂/策略对象。然后,稍后,当您需要创建的对象时,请让Factory/Strategy对象创建它。