数十种getter方法与单一get方法相比

时间:2010-11-22 06:53:35

标签: java

我与同事就下列问题进行了讨论:

我们的项目读入配置文件并存储了许多参数。他将这些数据与每个变量的几十个getter方法一起存储在命名变量中。在我看来,这使得班级过度使用getter方法并且难以维护。

private var;

public String getVar() {
 return var;
}
// This appears dozens of times in the class
......

我的解决方案是将键值对存储在映射中,并使用单个getValue(String key)方法,该方法将表示每个变量的键作为参数。密钥将作为常量列表存储在Config类中,该类还将处理从文件中读取数据。

Config c = new Config();
c.readConfig(someFile);
...
c.getValue(Config.SOME_VAR);

他反对我的设计的论点是,如果任何密钥需要改变或被淘汰,那么密钥的所有实例都必须在源代码的许多地方被追捕和更改,而在他的设计中,一切都是从1个档案。此外,类型安全性存在问题,因为从getValue()返回的String中的Integer.parseInt()可能会崩溃,而在他的方法中,返回类型是固定的。

有关上述内容的任何评论?感谢。

3 个答案:

答案 0 :(得分:4)

他的解决方案难以维持什么?除非配置格式发生变化,否则我不会预见到任何维护(尽管总是可能出现意外)。如果需要维护,我认为这个解决方案会更容易,因为所有相关的解析(包括string-> int等)都在一个地方。

他的编译时检查要好得多。如果删除方法,编译器会告诉您。如果将返回值分配给错误的类型,编译器将告诉您。

答案 1 :(得分:1)

假设您在配置文件中维护数据是正确的,这些变量的值是固定的。如果是这样,你可以不使用ENUM吗?

public enum Data {

RED("red"),

WHITE("white");

private String color;

    private Data(String color){
     this.color = color;
    }


   public String getColor(){return color;}
}

如果您尝试更多地考虑设计,您甚至可以设法使用不同的数据类型。

答案 2 :(得分:0)

我倾向于使用Apache Commons Configuration之类的框架来提供对属性的类型访问。例如,如果您有一个int属性,则可以使用:

int number = config.getInteger(INT_PROPERTY);

您应该在一个地方定义所有密钥,这样如果您决定更改密钥,您只需在一个地方更改密钥。例如:

public static final String DB_PASSWORD = "db_connection_password";

要获得财产使用:

String password = config.get(DB_PASSWORD);

如果您决定将密钥更改为db_passwd,则只需更改DB_PASSWORD常量的值。其余代码保持不变。