这似乎是一个基本问题,但我希望能做到这一点。
我有一个'世界级'。在该类中,我有一个绘制边框的方法,具体取决于用户设置的地图大小。
如果变量'mapSize'是私有的,但我想从同一个类中访问它的值,是否更适合直接引用它,或者使用getter方法。
下面的代码应该解释我想知道的内容。
package javaFX;
public class AWorld {
//initialized later
AWorld newWorld;
private int mapSize = 20;
public int getMapSize()
{
return mapSize;
}
public void someMethod()
{
int var = newWorld.mapSize; //Do I reference 'mapSize' using this...
}
// Or...
public void someOtherMethod()
{
int var = newWorld.getMapSize(); //Or this?
}
public static void main(String[] args) {}
}
答案 0 :(得分:2)
由于您获得了原始字段,因此其中任何一个都可以。如果get
方法在返回数据之前执行另一操作,例如对值执行数学运算,那么最好使用它而不是直接调用该字段。这在您的类上使用代理/装饰器模式时特别适用。
这是上面第二个陈述的一个例子:
//base class to be decorated
abstract class Foo {
private int x;
protected Foo foo;
public int getX() { return this.x; }
public void setX(int x) { this.x = x; }
public Foo getFoo() { return this.foo; }
//method to prove the difference between using getter and simple value
public final void printInternalX() {
if (foo != null) {
System.out.println(foo.x);
System.out.println(foo.getX());
}
}
}
//specific class implementation to be decorated
class Bar extends Foo {
@Override
public int getX() {
return super.getX() * 10;
}
}
//decorator
class Baz extends Foo {
public Baz(Foo foo) {
this.foo = foo;
}
}
public class Main {
public static void main(String[] args) {
Foo foo1 = new Bar();
foo1.setX(10);
Foo foo2 = new Bar(foo1);
//here you see the difference
foo2.printInternalX();
}
}
输出:
10
100
答案 1 :(得分:0)
你最好直接取消引用它。
private修饰符的要点是不将内部实现暴露给其他类。这些其他类将使用getter方法获取私有属性的值。
在你自己的课堂上,使用getter是没有意义的。更糟糕的是,有人可能会在扩展您的类的类中覆盖该方法,并且getter可能会执行您不期望的内容
答案 2 :(得分:0)
恕我直言,如果您要引用当前实例的字段,则一般规则是直接使用mapSize
或this.mapSize
访问该字段。
如果要引用来自不同实例的值(无论是同一个类还是不同的类,我都会使用getter方法)。我相信这会导致更简单的重构。它还维护任何其他实例通过getter获取字段值的合同,这允许getter中的其他功能。