我正在编写一个代表一些简单几何图形的 Java 类。
在最顶层的abstract
类(它本身是package-private)我已经声明了我需要从同一个包中的子类访问的属性。
final
如果我在 中声明一个属性AbstractClass
,
final int foo;
我将能够直接在包中访问它,而无需对 getter 方法大惊小怪。然而。根据“实践”(或我认为是常见的风格)做的将是:
private final int foo;
这当然需要一个非private
吸气剂。子类必须引用foo
(这是一个非常相关且典型的属性),就好像它是某个外部对象一样:
this.getFoo();
它添加代码并删除访问这些成员的直接方式(即foo
)。
跳过修饰符是否有任何缺点private
,因为它们无论如何都是最终的,我不担心在包内部暴露这些属性?
我知道 OO 拥护者声称 getter/setter 是对象访问它们自己的属性的一种非常自然的方式——但这什么时候会使任何非装饰性的、非 [插入任何 JavaBeans 样式的东西] 有所不同?
考虑一个内部类 ,Coordinate
它非常简单,因为它有两个int
属性 - 将所有用法留给 class OuterClass
:
class OuterClass{
final static class Coordinate{
final int x, y;
Coordinate(int x, int y){
this.x = x;
this.y = y;
}
}
Coordinate coordinate;
}
对于这个内部类 - 我为什么要为创建吸气剂的实践而烦恼?getter 会引入更多代码并强制同一包中的任何类调用coordinate.getX();
而不是简单地调用coordinate.x;
. 这里有开销吗?注意final
class 上的修饰符Coordinate
。