我很确定这是不可能的(考虑到它是如此糟糕的编程习惯),但无论如何我都会问。
在Java中,有没有办法使用点运算符来使用字符串代替方法名称(或其他东西)?
例如:java.stringname.NumericShaper();其中stringname =“awt.font”
我正在尝试将一些重复的代码放入迭代循环中。例如,我的一个变量是“Settings.can1.baud”,我想在每次循环时迭代“can1”部分。也许有更好的方法来做到这一点?
我是Java编程的新手,所以我不确定这有什么意义......
答案 0 :(得分:2)
如果您的意思是您有一群名为can1
,can2
,can3
等的成员,那么您应该使用array或{{3}而不是。
可以使用collection执行您想要的操作。但在这种情况下,它是繁琐的,不好的做法(经常),而且是不必要的。
答案 1 :(得分:2)
你可以使用反射来做到这一点:
try {
//loop over stringnames?
String stringname = "awt.font";
Class<?> numericShaperClass = Class.forName("java." + stringname + ".NumericShaper");
NumericShaper numericShaper = (NumericShaper) numericShaperClass.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
至于问题的第二部分,您可以使用Class.getField()方法访问Properties类的成员变量。
在这种情况下使用反射可能会过度,并且可能导致一些非常难以理解的代码,并且代码可能很慢。