2011-11-20 122 views
0

只是一个很小的问题很简单的问题。以下是我的编程2课程的编程任务的一部分。它侧重于继承和多个类。我已经回答了这个问题,但希望将这些类整合到一个主函数中,并实际构建一些内容,而不是仅仅提交最低限度的内容。动态命名一个类的实例?

我的问题是下面的代码部分。用户运行程序时,会出现一个对话框,询问他要添加什么(CD或电影,它们都是单独的类)。

我想要的是用户在程序运行时实际命名类的具体实例。因此,用户将点击Movie,例如,提示输入名称,然后在下一行使用电影类中的构造函数来创建一个带有用户输入名称的新实例类?这可能吗?我尝试使用一个简单的字符串x = JOptionpane,然后命名类x,但它不起作用。我在想可能有一些方法会引用字符串?像contents.x可能?

在此先感谢!

import javax.swing.JOptionPane; 
public class Main 
{ 

    public static void main (String args []) 
    { 
    Object[] options = {"Movie", 
       "CD", 
       "Cancel"}; 
      int n = JOptionPane.showOptionDialog(null, "Would you like to add an item?","Product", 
         JOptionPane.YES_NO_CANCEL_OPTION, 
          JOptionPane.QUESTION_MESSAGE, 
           null, 
            options, 
             options[2]); 

    switch(n) 
    { 
    case 0: 
    String moviet = JOptionPane.showInputDialog("Title:"); 
    int movieID = Integer.parseInt(JOptionPane.showInputDialog("ID:")); 
    Movie moviett = new Movie(moviet, movieID); 


    } 


    } 

} 

回答

4

如果这不是太远远超出你的类的内容,你可以使用一个Map<String, Media> 存储由运行时指定的字符串确定的情况。

Map<String, Media> instances = new HashMap<>(); 
// snip... 
String moviet = JOptionPane.showInputDialog("Title:"); 
int movieID = Integer.parseInt(JOptionPane.showInputDialog("ID:")); 
Movie moviett = new Movie(moviet, movieID); 
instances.put("some user-provided string", moviett); 

假设MovieCD二者延伸/实施Media

+1

GMTA,你击败了我! 1 + –

+3

我的乳头高兴地爆炸 –

+0

这有点凌驾于我的头上,但我会研究它。感谢您的迅速回复。时间去Google搜索! – Eogcloud

2

Java不会以这种方式工作,事实上变量名称远不如您想象的那么重要,并且几乎不存在于编译代码中。相反,如何使用字符串设置Movie类的字段,可能是名为“name”的字符串字段。如果你想检索一个基于String的类实例,可以考虑使用一个Map,比如HashMap。