0

我很确定这是不可能的(考虑到它是如此糟糕的编程实践),但我还是要问。

在 Java 中,有没有办法使用点运算符使用字符串代替方法名称(或其他名称)?

例如:java.stringname.NumericShaper(); 其中字符串名称 = “awt.font”

我正在尝试将一些重复的代码放入迭代循环中。例如,我的变量之一是“Settings.can1.baud”,我想在每次循环时迭代“can1”部分。也许有更好的方法来做到这一点?

我是 Java 编程新手,所以我不确定这是否有意义......

4

2 回答 2

2

如果您的意思是您有一堆名为can1, can2,can3等的成员,那么您应该使用数组集合来代替。

可以使用反射做你想做的事。但在这种情况下,它是繁琐的、不好的做法(通常),而且是不必要的。

于 2012-05-11T20:22:25.920 回答
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 类的成员变量。

在这种情况下,使用反射可能有点过头了,可能会导致一些非常不可读的代码,并且可能会很慢。

于 2012-05-11T20:25:12.040 回答