迭代java中的变量名(Tridium Baja)

时间:2012-07-10 21:35:33

标签: java

在Java中,有没有办法迭代变量列表

(例如Avg1,Avg2,Avg3)将数字替换为变量?

我不能使用数组,因为它们在Tridium环境中没有出现。

我需要这样的东西:

for (i=1;i<10;i++) {
    getAvg(i).setValue(5);
}

我必须使用以下格式才能设置值:

getVarName().setValue(value);

其中VarName =变量名称,以大写字母开头 和value =将变量设置为的值。

4 个答案:

答案 0 :(得分:1)

我终于想出了如何做我需要的事情。

for (int i=1; i <= incount; i++) {   

    String ord = getString("BqlOrd" + i);

    Bnum = (BStatusNumeric)get("Num"+i);
    Bavg = (BStatusNumeric)get("Avg"+i);
    Bmin = (BStatusNumeric)get("Min"+i);           
    Bmax = (BStatusNumeric)get("Max"+i); 
    Bdefault = (BStatusNumeric)get("Default"+i); 
}

这有效地遍历Tridium程序中的“槽”,这些程序是BStatusNumeric类。

答案 1 :(得分:0)

Java在运行时没有对局部变量提供任何形式的反射,所以如果我理解正确,你就不能做你所要求的。如果你想迭代的是类的数据成员(实例字段),你可以用反射来做,但不能用局部变量来做,这可能完全由编译器优化。

答案 2 :(得分:0)

如果可以使用属性而不是局部变量,则可以使用反射。也就是说,如果环境不支持数组,我怀疑它会支持反射。

答案 3 :(得分:0)

我对Tridium环境知之甚少,但我认为收藏框架也是不可能的......

尝试使用enum并实施java.util.Enumeration。如果你没有,请从中获取灵感。

public enum Foo implements java.util.Enumeration {
    AVG1, AVG2, AVG3, AVG4, AVG5;

            private Foo currentOption;

    public boolean hasMoreElements() {
        if (currentOption!=AVG5) return true;
                    else return false;
    }
    public Object nextElement(){
        switch (currentOption) {
                        case AVG1: currentOption=AVG2; return AVG2;
                        case AVG2: currentOption=AVG3; return AVG3;
                        case AVG3: currentOption=AVG4; return AVG4;
                        case AVG4: currentOption=AVG5; return AVG5;
                        default: return null;
                    }
    }
}

代码质量不是很好,但你明白了。