【问题标题】:Get string and run that as a class [duplicate]获取字符串并将其作为类运行[重复]
【发布时间】:2014-01-08 04:17:36
【问题描述】:

很抱歉这个措辞奇怪的问题,但我想知道如何获取一个字符串并使用它来创建一个新对象。所以我有超过 100 个问题,如果我想运行,比如说,问题 57,我会先使用Problem p = new p57();,然后再使用p.run() 来获得解决方案。我想接受用户输入,然后使用它来解决问题.run(),而不必创建超过 100 个问题

【问题讨论】:

标签: java class interface


【解决方案1】:

使用Class.forName() 获取Class 实例。您可以使用Class.newInstance() 创建该类的新对象。

String className = String.format("org.example.problem.P%d", 57);
Class<Problem> clazz = (Class<Problem>) Class.forName(className);
Problem problem = clazz.newInstance();
problem.run();

【讨论】:

  • 我用 Class 替换了 clazz。我收到一个错误:“无法从静态上下文引用非静态方法 newInstance()”
  • 不要替换它! clazz 是类的一个实例。 Class.newInstance() 是一个非静态方法,应该在对象上调用(在本例中为 clazz)。
【解决方案2】:

你应该使用反射概念来这样做

Class.forName(className);

【讨论】:

    【解决方案3】:
    Class c = Class.forName(name);
    c.newInstance();
    

    如果名称是“标准化”的,例如,它们的编号就像你说的那样,这是微不足道的。

    如果他们没有实现接口,您可以使用自省来运行该方法,否则您可以在您创建的实例上调用接口方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多