gpt4 book ai didi

java - 使用字符串值作为类名来调用方法

转载 作者:行者123 更新时间:2023-12-01 18:24:27 27 4
gpt4 key购买 nike

这对我来说很难(主要是因为我什至不确定我在寻找什么,所以我会尽力解释)。我想要一些引擎类文件(所有文件都具有相同的方法,但会使用不同的计算)。然后我希望我的主类获取我选择的类的名称并调用正确类中的方法。放入漂亮的代码,如下所示:

Engine1.java:

public static class Engine1{
doCoolStuff(){
//coolStuff happening
}
}

Engine2.java:

public static class Engine2{
doCoolStuff(){
//coolStuff happening in a different way
}
}

Main.java:

String EngineType = "Engine1";

public class Main{
public Main(){
(Class.forName(EngineType)).doCoolStuff();
}
}

这几乎就是这个想法,我什至不确定这是否是最好的方法,但这就是我现在已经取得的进展,如果 Java 中有更好的方法来处理这些东西,我也欢迎提出建议因为我是那里的新手。显然,在当前状态下,此代码无法编译(因为以下行:Class.forName(...).doCoolStuff(); “无法解析方法”

编辑:

这个问题已经得到解答,但我觉得重要的是要注意我的代码还有另一个问题:方法 Class.forName() 需要类的完整路径名,即不仅仅是“Engine1”而是“com.packageName”。发动机1”。可能会为一些人节省 30 分钟:P

最佳答案

对接口(interface)进行编码,以便所有实现共享一个方法:

public interface Engine {
public void doCoolStuff();
}

public class Engine1 implements Engine {
@Override
public void doCoolStuff() {
// ...
}
}

然后,您可以使用以下方式调用该方法:

((Engine) Class.forName("Engine1").newInstance()).doCoolStuff();

更好的方法是将实例放入 Map 中:

Map<String, Engine> engines = new HashMap<>();
engines.put("Engine1", new Engine1()); // etc...
// .... later
engines.get("Engine1").doCoolStuff();

关于java - 使用字符串值作为类名来调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26672046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com