如何使用客户端调用的另一个类中的方法
Posted
技术标签:
【中文标题】如何使用客户端调用的另一个类中的方法【英文标题】:How to use methods from another class, called by the client 【发布时间】:2021-12-27 07:51:12 【问题描述】:我正在制作一个程序,让用户调用一个类,就像它需要一个字符串输入,然后调用该类的 run() 方法,有什么办法吗?我希望是这样的:
String inp=new Scanner(System.in).nextLine();
Class cl=new Class(inp);
cl.run();
我知道代码不正确,但这是我的主要想法
【问题讨论】:
【参考方案1】:按名称创建和使用类需要一些先决条件:
必须使用类的全名,包括包名。 你需要知道构造函数的参数。通常无参数构造函数用于此类用例。 (可选)您需要该类必须实现的接口,该接口声明方法“run”(或您要使用的任何其他方法)。一个带有Runnable
子类的例子:
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);
【讨论】:
如果要使用参数怎么办? @SameerAchhab:我添加了一个带参数的示例【参考方案2】:字符串变量不能作为类的引用。 改变对象之类的东西取决于输入 你可以使用多态和设计模式(Factory Pattern)
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于如何使用客户端调用的另一个类中的方法的主要内容,如果未能解决你的问题,请参考以下文章