JAva获取类变量:多个方法或一个带开关的方法

时间:2016-09-14 02:39:54

标签: java methods switch-statement

关于以下两个选项是否有最佳实践来获取变量,在本例中是MainScene类?我实际上有更多的变量,所以我最终会得到许多其他方法或2-3种切换方法。

  

类MainScene

选项1 - 多种方法

public TextField getLoadTxt(){
    return loadTxt;
}

public TextField getdownTxt(){
    return downTxt;
}

public TextField getflightTxt(){
    return flightTxt;
}

public TextField getacTxt(){
    return acTxt;
}

public TextField getairportTxt(){
    return airportTxt;
}

选项2 - 使用切换的一种方法

public TextField getTextField(String textField){
    TextField text = new TextField();
    text.setText("Default");
    switch(textField){
        case "loadTxt": return loadTxt;
        case "downTxt": return downTxt;
        case "flightTxt": return flightTxt;
        case "acTxt": return acTxt;
        case "airportTxt": return airportTxt;
        default: return text;
    }
}

3 个答案:

答案 0 :(得分:2)

对于选项1,您可以使用lombok,它有助于生成所有getter函数。对于选项2,您可以使用反射。

如果使用Maven,包括

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.14.8</version>
</dependency>

以及代码:

import lombok.Data;
public @Data
class ReflectionTest {
    String str = "abc";

    String str2 = "ecd";

    public void get() {
        try {
            System.out.println(this.getClass().getDeclaredField("str").get(this));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

public class App {
    public static void main(String[] args) {
        ReflectionTest reflectionTest = new ReflectionTest();
        // get value by option 2
        reflectionTest.get();
        // get value by option 1
        System.out.println(reflectionTest.getStr2());
    }
}

答案 1 :(得分:1)

通常选项1和大多数(全部?)IDE可以自动生成setter / getter方法。

此外,如果你让IDE完成所有工作,那么引入错误的机会就会更容易,也就更少。

答案 2 :(得分:1)

一般来说,你应该有一个“吸气者”。每个变量的方法。但是,如果您有大量代表相同类型的不同属性的变量,那么您可能需要考虑使用属性枚举:

public enum Field {
    LOAD, DOWN, FLIGHT, AC, AIRPORT;
}

public MainScene {
    private final EnumMap<Field,TextField> fields = new EnumMap<>(Field.class);

    public TextField getField(Field field) {
        return fields.get(field);
    }
}