分享
为什么问答平台  ›  专栏  ›  技术社区  ›  Moritz

有没有方法在数组列表中保存对象引用? - Is there a way to save object references in an array list?

  •  0
  • Moritz  · 技术社区  · 1 周前

    我正在编写一个Java程序,允许你通过控制台“混合”饮料。我有继承饮料类的类,例如,如果用户键入字符串“beer”,我想创建一个新的“beer”类。 如果用户键入字符串“wine”,则将出现一个新的“wine”类。 我怎样才能把“啤酒”串翻译成啤酒课。

    我试着创建一个数组列表,然后把我所有的饮料都加进去,说

    al.add(new Beer()); 
    

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

    3 回复  |  直到 1 周前
        1
  •  0
  •   George Z.    1 周前

    这里的答案是使用一个简单的调用 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.

        2
  •  0
  •   Willem    1 周前

    您只需检查if语句中的用户输入:

    if (userInput.equals("beer")) {
       a1.add(new Beer());
    }
    
        3
  •  0
  •   Moritz    1 周前

    我认为我正在寻找的答案在爪哇被称为“反射”。 谢谢你们!