Java:如何允许根据传递的参数选择变量?

时间:2011-09-12 20:41:51

标签: java

这是我的班级:

class StockQuote {

Float[] high, low, close, open;

public float GetMax(String choose_data_type) {
    if data_type="high" {
        Routine_Searchmax(high)
    } elseif strdata_type="low" {
        Routine_Searchmax(low)
    }
}
private float Routine_Searchmax(float[] variable) {
   // here i search max value into my array
}
}

我的问题是:可以使用变量数组的名称传递字符串变量,然后..处理该特定变量? 有没有办法做到这一点 ? 感谢

2 个答案:

答案 0 :(得分:2)

实现一个单独的私有方法,该方法将变量的名称作为参数并返回相应的float数组。然后,您可以在实现计算的所有方法中使用此辅助方法。

如果你要识别变量的参数是一个字符串,那么将它“转换”到float数组的最简单方法就是一种if-cascade。

if(name.equals("high") return this.high;
if(name.equals("low")...
throw new IllegalArgumentExeption();

如果你有很多这个变量(高,低......),那么你可以使用反射代替这个if-cascade。

重要的是使用ENUM而不是字符串!


但是我的意见是一个更好的解决方案是使用面向对象!创建一个只为其自己的valus实现getMax的类的高,低......实例。所以你可以这样做:

 MyClass high = new MyClass;
 ...
 float higgMax = high.getMax();

答案 1 :(得分:1)

更好的方法是使用枚举

枚举声明

public enum Float
{
    HIGHT("high"), LOW("low"), CLOSE("close"), OPEN("open");

    String code;

    Float(String code)
    {
        this.code=code;
    }

   // add getter and setter for string code here 
}

第12课

public class StockQuote {

    public Float getMax(String chooseDataType) {

        return routineSearchmax (Float.valueOf(chooseDataType));
    }

    //This float is now enum
    private Float routineSearchmax(Float variable) {
           // here i search max value into my array
        }
}

但是就像这些家伙说的那样你也可以做到这一点,但在我看来这种方式更整洁也注意到没有声明。