gpt4 book ai didi

java - 标记方法并通过标记从客户端对象调用它们

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:56 25 4
gpt4 key购买 nike

我一直在尝试找出一种方法来标记我的基类中的几个方法,以便客户端类可以通过标记调用它们。示例代码为:

public class Base {
public void method1(){
..change state of base class
}

public void method2(){
..change state of base class
}

public void method3(){
..change state of base class
}
}

来自 main() 方法的客户端类将通过随机指令序列调用 Base 的每个方法:

public static void main(String[] args) {
String sequence = "ABCAABBBABACCACC"
Base aBase = new Base();
for (int i = 0; i < sequence.length(); i++){
char temp = sequence.charAt(i);
switch(temp){
case 'A':{aBase.method1(); break;}
case 'B':{aBase.method2(); break;}
case 'C':{aBase.method3(); break;} }
}

System.out.println(aBase.getState());

}

现在我希望完全摆脱 Client 对象的 switch 语句。我知道用多态替换 switch 的技术,但想避免创建一组新类。我希望简单地将这些方法存储在适当的数据结构中,并以某种方式用序列中的匹配字符标记它们。

map 可以轻松地存储具有可以完成这项工作的值/键对的对象(就像我所做的 here )或命令模式,但由于我不想用对象替换这些方法,是否存在也许是一种不同的方式来存储方法并让客户端有选择地调用它们?

感谢任何建议

最佳答案

是这样的吗?

public class Base {

private final Map<Character, Method> methods = new HashMap<Character, Method>();

public Base() throws SecurityException, NoSuchMethodException {
methods.put('A', getClass().getMethod("method1"));
methods.put('B', getClass().getMethod("method2"));
methods.put('C', getClass().getMethod("method3"));
}

public Method getMethod(char c) {
return methods.get(c);
}

public void method1() {}

public void method2() {}

public void method3() {}

}

然后

    public static void main(String[] args) throws Exception {
String sequence = "ABCAABBBABACCACC";
Base aBase = new Base();

for (int i = 0; i < sequence.length(); i++) {
char temp = sequence.charAt(i);
aBase.getMethod(temp).invoke(aBase);
}
}

关于java - 标记方法并通过标记从客户端对象调用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1400305/

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