1

为了澄清,这就是我的意思:

public Image getRespectiveImage(int temp) {
    switch(temp){
    case 1:return one;
    case 2:return two;
    case 3:return three;
    case 4:return four;
    case 5:return five;
    }
    return null;
}

相比

public Image getOne(){return one;}
public Image getTwo(){return two;}
public Image getThree(){return three;}
public Image getFour(){return four;}
public Image getFive(){return five;}

我倾向于更喜欢前者,因为出于某种原因它看起来更简单,但似乎每个人都使用后者。有人会使用一堆getter方法有什么原因吗?

4

4 回答 4

1

这并不是关于“哪个更好或更坏”——如果您编写的 getter 属性本质上没有被索引,那么为它们编写索引 getter 是没有意义的。如果您的属性不是同一类型,那么这是一个很好的线索,表明索引表示通常不会有帮助。

如果您使用的属性确实可以存储为索引列表,那么当然可以 - 但我也会为该字段使用数组(考虑:如果数组类型不适合该字段,那么也许索引吸气剂实际上也不合适)。

通常希望您的 getter 和 setter 反映您已声明的字段。当您的字段是数组类型(符合JavaBeans 规范,第 8.3.3 节)时,您将使用带有 int 索引参数的 getter/setter。

你想这样做有两个原因。首先,在概念层面上,如果您的字段与您的 getter/setter 明显不同,尽管有很多正当理由,您可能想看看您是如何组织字段的,看看您是否可以重构更准确地代表您的对象的目的的东西(假设公共 getter/setter 是这个目的的良好表示)。这可能表明更大的设计问题。

其次,这更多的是要知道你在做什么,你的 getter 和 setter 会影响与操作 bean 的 API 的交互,也会影响与使用反射的 API 的交互。例如,可以将 Hibernate 配置为使用 getter/setter 属性或直接字段访问将对象持久保存到数据库。因此,根据那里的配置,您至少必须了解您的 getter/setter 与字段设置。

这里的要点是:不要试图以有一套规则定义何时更好或更坏的想法来解决这个问题。只需考虑您正在使用的对象的性质,以及它们的属性的实际含义(语义),然后编写一个有意义的公共接口。

于 2013-08-15T18:12:50.280 回答
0

为您希望用户与之交互的所有私有变量设置 getter 和 setter 是一种很好的做法。

虽然您的上述解决方案简化了,但它会使其他使用您的代码的人感到困惑,因为这不是常见的做法。

于 2013-08-15T18:03:22.190 回答
0

这取决于您面临的问题。第一种方法没有任何问题,如果您使用“枚举”来限制和记录选项,则更是如此:

enum ImageCategory {
  Unchecked,
  Checked,
  Disabled;
}

Image getRespectiveImage(ImageCategory category);

只要确保每个“类别”都代表相同性质的一个实例。

另一方面,有这样的方法显然不是一件好事:

Object get(String property);

除非您正在编写自己的 Dictionary/Map 类。

于 2013-08-15T18:11:31.290 回答
0

与第一种方法相比,使用一堆 getter 方法有两个明显的优势。

  1. 正确命名的 getter 方法会自我记录您从对象中获取的内容。
  2. 在第一种情况下,您需要向用户提供某种文档,告诉他们哪个输入对应于返回。当您有单独的吸气剂时,这不是必需的。(给客户带来更大的负担)
于 2013-08-15T18:15:01.283 回答