gpt4 book ai didi

Java 访问修饰符最佳实践

转载 作者:行者123 更新时间:2023-12-02 05:03:13 24 4
gpt4 key购买 nike

这似乎是一个基本问题,但我想弄清楚这一点。

我有一个“AWorld”类。在该类中,我有一个根据用户设置的 map 大小绘制边框的方法。

如果变量“mapSize”是私有(private)的,但我想从同一个类中访问它的值,那么直接引用它还是使用 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) {}

}

最佳答案

其中任何一个都可以,因为您得到的是一个原始字段。如果 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

关于Java 访问修饰符最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com