如何使用来自另一个 class 的方法,由客户端调用

How to use methods from another class, called by the client

我正在制作一个程序,让用户调用一个 class,就像它需要一个字符串输入,然后调用那个 class 的 运行() 方法,是吗有什么办法吗?我希望是这样的:

String inp=new Scanner(System.in).nextLine();
Class cl=new Class(inp);
cl.run();

我知道代码不正确,但这是我的主要想法

字符串变量不能作为 Class 的引用。 改变对象之类的东西取决于输入 你可以使用多态和设计模式(工厂模式)

按名称创建和使用 class 需要一些先决条件:

  • 必须使用 class 的全名,包括包名。
  • 你需要知道构造函数的参数。通常无参数构造函数用于此类用例。
  • (可选)您需要一个此 class 必须实现的接口,该接口声明方法“运行”(或您要使用的任何其他方法)。

Runnable 的子class 的示例:

    String className = "some.classname.comes.from.Client";

    Class<Runnable> clazz = (Class<Runnable>) Class.forName(className);
    Runnable instance = clazz.getConstructor().newInstance();
    instance.run();

如果没有通用接口,可以使用反射调用方法:

    Class<Object> clazz = (Class<Object>) Class.forName(className);
    Object instance = clazz.getConstructor().newInstance();
    clazz.getMethod("run").invoke(instance);

或使用带参数的方法:

    Integer p1 = 1;
    int p2 = 2;
    clazz.getMethod("methodWithParams", Integer.class, Integer.TYPE).invoke(instance, p1, p2);