有没有一种方法可以将对象引用保存在数组列表中?

时间:2019-07-07 10:10:07

标签: java

我正在编写一个Java程序,该程序允许您通过控制台“混合”饮料。我有继承酒类的类,例如,如果用户键入字符串“啤酒”,我想创建一个新的“啤酒”类。 如果用户键入字符串“ wine”,则添加一个新的“ wine”类。 如何将“啤酒”字符串转换为啤酒课。

我尝试创建一个ArrayList,然后说出我要添加的所有饮料

al.add(new Beer()); 

问题在于,我只想在用户实际键入“啤酒”时创建一个新的Beer实例。

3 个答案:

答案 0 :(得分:0)

您只需在if语句中检查用户输入即可:

if (userInput.equals("beer")) {
   a1.add(new Beer());
}

答案 1 :(得分:0)

我认为我正在寻找的答案在Java中称为“反射”。 谢谢大家!

答案 2 :(得分:0)

答案是使用对Class#newInstance方法的简单调用。将所有类都放在一个结构中并对其进行迭代以找到匹配项。

一个例子:

public class Classes {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        List<Class<?>> classes = new ArrayList<>();
        classes.add(Beer.class);
        classes.add(Wine.class);
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();

        for (Class<?> clazz : classes) {
            if (clazz.getSimpleName().equals(input)) {
                Object obj = clazz.newInstance();
            }
        }
    }

    private static class Beer {
        public Beer() {
            System.out.println("A beer has been created.");
        }
    }

    private static class Wine {
        public Wine() {
            System.out.println("A wine has been created.");
        }
    }
}

输入/输出示例:

Wine
A wine has been created.

如果您有不同的构造函数,并且每次都想选择一个不同的构造函数,请选中此answer.