Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java迭代变量名(Tridium Baja)_Java - Fatal编程技术网

用java迭代变量名(Tridium Baja)

用java迭代变量名(Tridium Baja),java,Java,在Java中,有没有一种方法可以遍历变量列表 (例如Avg1、Avg2、Avg3)是否将数字替换为变量 我不能使用数组,因为它们在Tridium环境中无法通过 我需要这样的东西: for (i=1;i<10;i++) { getAvg(i).setValue(5); } 其中VarName=变量名称,以大写字母开头 和value=将变量设置为的值 Java在运行时不提供对局部变量的任何类型的反射,因此,如果我理解正确,您就无法执行您所要求的操作。如果要迭代的是类的数据成员(实例字

在Java中,有没有一种方法可以遍历变量列表

(例如Avg1、Avg2、Avg3)是否将数字替换为变量

我不能使用数组,因为它们在Tridium环境中无法通过

我需要这样的东西:

for (i=1;i<10;i++) {
    getAvg(i).setValue(5);
}
其中VarName=变量名称,以大写字母开头
和value=将变量设置为的值

Java在运行时不提供对局部变量的任何类型的反射,因此,如果我理解正确,您就无法执行您所要求的操作。如果要迭代的是类的数据成员(实例字段),可以使用反射,但不能使用局部变量,这可能完全由编译器优化。

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

我对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;
                    }
    }
}

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

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

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); 
}

for(int i=1;i“我不能使用数组,因为它们在Tridium环境中无法使用。”说什么?我无法想象任何不支持数组的Java环境。VarName是一个变量,您希望获取VarName()…?您能发布一段代码来显示您正在使用的是什么吗?您的问题不清楚。我可以在程序中使用数组,但不能输出到环境所称的“插槽”中。这些是某种物理/虚拟输入或输出,与现实世界中的事物相链接。请坚持使用代码,因为您的问题专门涉及Java语言。例如,“变量列表”如果看不到插槽的定义位置/定义方式,这并不意味着什么。请随时更新您的问题。就是这样,插槽不是在代码中正式声明的,它们是通过编程或在“插槽编辑器”中设置的。例如,属性1 Avg1 Dynamic baja:StatusNumericSomething(或更简单的方法)将起作用,但变量的数量会有所不同。有一个用户定义的变量(inCount)决定了插槽(变量)的数量迭代。然后,在进行任何实际计算之前,将以编程方式添加插槽。如果我事先知道Avg1、Avg2……将有多少次迭代,我可以手工编写冗长的代码。为了帮助我更好地理解您的问题,允许使用哪些库?我实际上认为反射可能会起作用。我不得不离开办公室一天,但我会让你知道它是否有效。假设你在父组件中工作,你可以得到如下类型的所有插槽:getChildren(BStatusNumeric.class)。
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); 
}