在Java中,我们什么时候应该使用一个可以返回多个对象的单一、全面的getter方法,而不是一堆较小的getter方法?

在Java中,我们什么时候应该使用一个可以返回多个对象的单一、全面的getter方法,而不是一堆较小的getter方法?,java,getter,Java,Getter,澄清一下,我的意思是: 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

澄清一下,我的意思是:

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方法的原因吗

对于希望用户交互的所有私有变量,最好使用getter和setter


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

最好为您希望用户交互的所有私有变量设置getter和setter


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

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

enum ImageCategory {
  Unchecked,
  Checked,
  Disabled;
}

Image getRespectiveImage(ImageCategory category);
只要确保每个“类别”都代表一个相同性质的实例

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

Object get(String property);

除非您正在编写自己的字典/地图类。

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

enum ImageCategory {
  Unchecked,
  Checked,
  Disabled;
}

Image getRespectiveImage(ImageCategory category);
只要确保每个“类别”都代表一个相同性质的实例

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

Object get(String property);
除非您正在编写自己的Dictionary/Map类。

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

如果您使用的属性存储为索引列表是有意义的,那么请务必这样做——但我也会为字段使用数组(请考虑:如果数组类型不适合该字段,那么可能索引的getter实际上也不适合)

您通常希望getter和setter反映您声明的字段。当您的字段是数组类型(符合第8.3.3节)时,您可以使用一个getter/setter,该getter/setter接受一个int索引参数

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

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

这里的要点是:不要试图用一套规则来定义当一种方式更好或更坏的时候。只考虑你正在使用的对象的性质,以及它们的属性实际上意味着什么(语义),写一个有意义的公共接口。

< P>这不是真的。“哪一个更好或更糟”--如果您正在为其编写getter的属性本质上没有索引,那么为它们编写索引getter是没有意义的。如果您的属性不是同一类型的,这是一个很好的线索,说明索引表示通常不会有帮助

如果您使用的属性存储为索引列表是有意义的,那么请务必这样做——但我也会为字段使用数组(请考虑:如果数组类型不适合该字段,那么可能索引的getter实际上也不适合)

您通常希望getter和setter反映您声明的字段。如果字段是数组类型(符合第8.3.3节的要求),则可以使用接受int索引参数的getter/setter

您这样做有两个原因。首先,在概念层面上,如果您的字段与getter/setter明显不同,尽管有很多有效的原因,但您可能想看看您是如何组织字段的,看看您是否可以重构到更准确地表示对象用途的内容t(假定公共的getter/setter是这个目的的良好代表)。这可能是更大的设计问题的一个迹象

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


这里的要点是:不要试图用一套规则来定义当一种方式更好或更坏时,只考虑你正在使用的对象的性质,以及它们的属性实际上意味着什么(语义)。,并编写一个有意义的公共接口。

与第一种方法相比,使用一系列getter方法有两个明显的优点