【发布时间】:2014-10-09 08:40:42
【问题描述】:
我想知道为什么最终修饰符不与 getter 和 setter 一起使用?
为什么这样做:
private int x;
public void setX(int x)
{
if(x >= 1) throw new IllegalArgumentException("X must be lower than 1");
this.x = x;
}
而不是这个:
private int x;
public final void setX(int x)
{
if(x >= 1) throw new IllegalArgumentException("X must be lower than 1");
this.x = x;
}
它没有提高封装性?我一直试图用谷歌澄清它,但我没有运气。
提前致谢。
【问题讨论】:
-
这一切都取决于。你打算制作 POJO 吗?
-
最好的封装是避免getter和setter(通常是可能的),并尝试遵循Tell,Don't ask的哲学。
-
this(“Java 最终修饰符”问题@stackoverflow)是否有助于回答您的问题?
-
如果 POJO 的目标是不可变,那么创建一个 getter
final是有意义的。 -
final修饰符将禁用子类以覆盖该方法。如果你想要这个设计,你应该只使用它,但这取决于。没有具体的答案。此外,对于代码优化,请将其留给 JIT,除非通过分析器证明该代码实际上会表现得更好。
标签: java oop encapsulation access-modifiers