在Java中,我们什么时候应该使用一个可以返回多个对象的单一、全面的getter方法,而不是一堆较小的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 one;}
public Image getTwo(){return two;}
public Image getThree(){return three;}
public Image getFour(){return four;}
public Image getFive(){return five;}
我倾向于选择前者,因为出于某种原因,它似乎更简单,但每个人似乎都在使用后者。有人会使用一堆getter方法的原因吗
# 1 楼答案
与第一种方法相比,使用一系列getter方法有两个明显的优势
# 2 楼答案
对于希望用户与之交互的所有私有变量,最好使用getter和setter
虽然您的上述解决方案简化了,但它会让其他使用您的代码的人感到困惑,因为这不是常见的做法
# 3 楼答案
这并不是关于“哪一个更好或更糟”——如果你正在为其编写getter的属性本质上没有索引,那么为它们编写索引getter是没有意义的。如果属性不是同一类型的,这是一个很好的线索,说明索引表示通常不会有帮助
如果您使用的属性作为索引列表来存储是有意义的,那么当然,无论如何——但是我也会为字段使用数组(请考虑:如果数组类型不适合该字段,那么可能索引的getter也不适合)
您通常希望getter和setter反映您声明的字段。如果字段是数组类型(符合JavaBeans spec,第8.3.3节),可以使用一个getter/setter,它接受一个int索引参数
你这么做有两个原因。首先,在概念层面上,如果你的字段与你的getter/setter显著不同,尽管有很多合理的理由,你可能想看看你是如何组织你的字段的,看看你是否可以重构到更准确地表示你的对象的目的的东西(假设公共getter/setter是这个目的的良好表示)。这可能预示着更大的设计问题
其次,这更多的是关于意识到你在做什么,你的getter和setter会影响与在bean上运行的API的交互,也会影响与使用反射的API的交互。例如,可以将Hibernate配置为使用getter/setter属性或直接字段访问将对象持久化到数据库。因此,根据那里的配置,您必须至少了解getter/setter与field设置
这里的要点是:不要试图带着一套规则来定义一种方式的好坏。只需考虑你正在使用的对象的性质,以及它们的属性实际上意味着什么(语义),并且编写一个公共接口,有意义。p>
# 4 楼答案
这取决于你面临的问题。第一种方法没有错,如果使用“枚举”来限制和记录选项,则更是如此:
只要确保每一个“类别”都代表一个相同性质的实例
另一方面,有这样的方法显然不是一件好事:
除非你在写自己的字典/地图课