我正在编写一个Java程序,该程序允许您通过控制台“混合”饮料。我有继承酒类的类,例如,如果用户键入字符串“啤酒”,我想创建一个新的“啤酒”类。 如果用户键入字符串“ wine”,则添加一个新的“ wine”类。 如何将“啤酒”字符串转换为啤酒课。
我尝试创建一个ArrayList,然后说出我要添加的所有饮料
al.add(new Beer());
问题在于,我只想在用户实际键入“啤酒”时创建一个新的Beer实例。
答案 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.