将字符串链接到函数
Linking a String to a Function
在 Java (Android) 中有没有办法 link 一个字符串和一个函数?我的目标是 运行 某个函数,具体取决于从单独的方法接收到的字符串。
ie if myString == "building" then execute buildingmethod();
我正在考虑像这样使用 HashMap:
HashMap<String,Runnable> hashDBTableUpdateRef = new HashMap<>();
hashDBTableUpdateRef.put("house",this.housemethod());
hashDBTableUpdateRef.put("shed",this.shedmethod());
hashDBTableUpdateRef.put("barn",this.barnmethod());
然后
String myString = getCalculatedString();
for (String s : hashDBTableUpdateRef) {
hashDBTableUpdateRed.get(s).run();
}
由于以下操作和自定义枚举,我无法真正创建带有参数的通用方法,例如 function anyBuilding(String buildingType)
。有什么想法吗? runnable
是前进的方向吗?
例如:
function housemethod() {
myHouseObject.runSomething();
}
function shedmethod() {
myShedObject.runSomething();
}
function barnmethod() {
myBarnObject.runSomething();
}
谢谢,
例如,您可以定义实现 Command
接口
的枚举
interface Command {
void execute();
}
enum MyEnum implements Command {
A() {
public void execute() {
System.out.println("A");
}
},
B {
public void execute() {
System.out.println("B");
}
};
}
现在您需要做的就是将字符串转换为枚举 MyEnum.valueOf("someString");
并返回对象,您可以调用 execute
方法。
但仍然存在主要问题,为什么要这样做以及要实现什么?因为这可能是更好的方法。
你已经很接近你想要的了,但是你应该用一个特定的界面来替换通用的Runnable
:
public interface MyInterface
{
public <return-type> doSomething(<parameters>) throws <exceptions>;
}
这是一种语义改进初始设计的方法,因为您可以命名您的方法,添加参数和异常,添加更多方法等
您的其余设计(针对每个所需行为的特定实现,并将它们全部存储在 Map 中)就可以了。
在 Java (Android) 中有没有办法 link 一个字符串和一个函数?我的目标是 运行 某个函数,具体取决于从单独的方法接收到的字符串。
ie if myString == "building" then execute buildingmethod();
我正在考虑像这样使用 HashMap:
HashMap<String,Runnable> hashDBTableUpdateRef = new HashMap<>();
hashDBTableUpdateRef.put("house",this.housemethod());
hashDBTableUpdateRef.put("shed",this.shedmethod());
hashDBTableUpdateRef.put("barn",this.barnmethod());
然后
String myString = getCalculatedString();
for (String s : hashDBTableUpdateRef) {
hashDBTableUpdateRed.get(s).run();
}
由于以下操作和自定义枚举,我无法真正创建带有参数的通用方法,例如 function anyBuilding(String buildingType)
。有什么想法吗? runnable
是前进的方向吗?
例如:
function housemethod() {
myHouseObject.runSomething();
}
function shedmethod() {
myShedObject.runSomething();
}
function barnmethod() {
myBarnObject.runSomething();
}
谢谢,
例如,您可以定义实现 Command
接口
interface Command {
void execute();
}
enum MyEnum implements Command {
A() {
public void execute() {
System.out.println("A");
}
},
B {
public void execute() {
System.out.println("B");
}
};
}
现在您需要做的就是将字符串转换为枚举 MyEnum.valueOf("someString");
并返回对象,您可以调用 execute
方法。
但仍然存在主要问题,为什么要这样做以及要实现什么?因为这可能是更好的方法。
你已经很接近你想要的了,但是你应该用一个特定的界面来替换通用的Runnable
:
public interface MyInterface
{
public <return-type> doSomething(<parameters>) throws <exceptions>;
}
这是一种语义改进初始设计的方法,因为您可以命名您的方法,添加参数和异常,添加更多方法等
您的其余设计(针对每个所需行为的特定实现,并将它们全部存储在 Map 中)就可以了。