我需要创建一百个getter和setter吗?

3

我有一个Setting.class文件,其中包含了一些变量。

private int timeRemember, timeConcentration;
private boolean hearts, spades, diamonds, clubs;

我知道我应该为它们创建 Getter 和 Setter,但这将需要约 50 行代码。如果我有更多的变量,假设有 40 个,那就会需要大约 200 行左右的代码。
我的问题是 - 每个人都这样做吗?还是有我不知道的方法?

2
你正在使用哪个集成开发环境(IDE)?你可以为你的字段生成所有的getter和setter。 - Ousmane D.
这也许会有所帮助 https://projectlombok.org/ - Philippe
1
我知道我可以做到,我已经做过了。我只是好奇人们是否都这样做。 - mafiozorek
是的,你可能应该创建get和set方法。它们并不毫无意义——请参见https://dev59.com/oHI_5IYBdhLWcg3wAeHl. - VGR
如果你询问别人做了什么,那么你的问题超出了SO的范围。如果你询问为什么应该这样做,那是为了信息隐藏(https://en.wikipedia.org/wiki/Information_hiding)。 - Jiri Tousek
1
我的做法是不使用太多实例变量的类。此外,考虑到类的实例在构造后必须始终处于有效和可用状态,单独设置所有字段可能没有意义。关于getter方法也可以提出类似的论点:这个类真的需要向整个世界公开其全部内部表示吗?往往情况下,这两个问题的答案都是否定的。 - biziclop
4个回答

6
如果您有40个实例变量,那么您很可能需要担心其他问题。您的类设计很可能存在问题。
通常来说,超过10-11个字段被认为是太多了。
除此之外,您还可以问自己这个类是否真的需要getter和setter方法?它能否是不可变的?等等。

0

是否需要为类变量编写getter和setter方法取决于您。这取决于该类在代码中的其他用途。如果您不确定,可以在开发过程中根据需要添加getter和setter方法。

然而,许多现代Java IDE都允许您自动生成getter和setter方法(例如Eclipse或IntelliJ)。在IntelliJ中,您可以使用“Code > Generate...”菜单来完成此操作。


3
我很喜欢自己得到了两个踩的投票,但没有任何评论。除了没有提到类设计之外,我看不出我的回答有什么与时代相矛盾的地方。 - kunruh
我本来想建议,不要使用字段,而是用一个单独的Map作为类中所有值的容器,并将键定义为final变量。然后我意识到,仅仅因为提出这种可能性,我就会被批评得很惨。总有一个“聪明”的人准备指出“正确”的做事方式,却没有任何好理由。 - Serg M Ten

0

你可以利用枚举(而不是每个花色都有一个布尔值),构建具有单一职责的类(分离时间和卡牌),并问问自己是否真的需要将该变量暴露在类外。


0

看一下lombok项目。它允许你使用注解“自动化”setter/getter的创建,除此之外还有很多其他功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接