我有一个文本文件,该文件列出了可以在Pump Class上执行的所有操作。
文本文件内容的示例
Start PayCredit Reject Start PayCredit Reject TurnOff
....
.... so on.
这些是Pump类的方法(Start(),Reject()等)
我需要编写一个代码,我可以逐个从文件中读取这些方法并执行它们。
public static void main(String[] args) throws IOException
{
Pump gp= new Pump();
File file=new File("C:\\Users\\Desktop\\checker\\check.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line=null;
while((line=br.readLine())!=null)
{
String words[]=line.split(" ");
for(int i=0;i<words.length;i++)
{
String temp=words[i]+"()";
gp.temp; //compilation error
}
}
}
您能告诉我如何实现此功能。
答案 0 :(得分:1)
如果您对反射不太熟悉,可以尝试使用Spring Framework项目中的org.springframework.util.ReflectionUtils
吗?
代码会是这样的:
Pump gp = new Pump();
....
String temp = // from text file
....
Method m = ReflectionUtils.findMethod(Pump.class, temp);
Object result = ReflectionUtils.invokeMethod(m, gp);
答案 1 :(得分:1)
您需要使用反射来在运行时调用方法。这是一个假设所有方法都不带任何参数的简单示例。
Class<? extends Pump> pumpClass = gp.getClass();
String methodName = words[i];
Method toInvoke = pumpClass.getMethod(methodName);
if (null != toInvoke) {
toInvoke.invoke(gp);
}
答案 2 :(得分:0)
首先要知道Java不是在运行时解释的。所以你不能这样做。
如果您已经拥有Start PayCredit Reject TurnOff等方法,您可以通过以下方式进行:
for(int i=0;i<words.length;i++)
{
String temp=words[i];
if (temp.equals("Start") gp.Start();
else if (temp.equals("PayCredit") gp.PayCredit();
...
}
答案 3 :(得分:0)
使用开关盒
for(int i=0;i<words.length;i++) {
String temp=words[i];
switch(temp) {
case "Start":
gp.start();
break;
case "PayCredit":
gp.PayCredit();
break;
}
}
答案 4 :(得分:0)
您可以使用反射来执行此操作,例如
String line=null;
Method method = null;
while((line=br.readLine())!=null)
{
String words[]=line.split(" ");
for(int i=0;i<words.length;i++)
{
String temp=words[i];
method = getClass().getMethod(temp);
method.invoke(this);
}
}
假设您想要在此处调用该方法,并且它是一个实例方法。有关详细信息,请查看Class.getMethod
及相关方法以及Method本身。您可能需要getDeclaredMethod,您可能需要使其可访问。
如果可能的话,我会想到你是否可以想到避免这种情况的方法 - 反思往往会很快变得混乱。值得退后一步并考虑这是否是最好的设计。如果您向我们提供更多详细信息,我们可能会建议替代方案。