动态命名类的实例?

时间:2011-11-20 22:58:27

标签: java class constructor joptionpane

关于小事的一个非常快速的问题。以下是我的编程2类的编程任务的一部分。它侧重于继承和多个类。我已经回答了这个问题,但是想要将这些类合并到一个main函数中并实际构建一些东西而不仅仅是提交最小值。

我的问题是下面的代码部分。用户运行该程序,会出现一个对话框询问他要添加的内容(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);


    }


    }

}

2 个答案:

答案 0 :(得分:4)

如果它不超出您班级的内容,您可以使用Map<String, Media> 1 来存储由运行时指定的字符串标识的实例。

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);

1 假设MovieCD都扩展/实施Media

答案 1 :(得分:2)

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