如何使用来自另一个 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);
我正在制作一个程序,让用户调用一个 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);