直接获取变量值而不是在Java中使用getter可以吗?

Is it ok to get variable value directly instead of using getter in Java?

我正在编写在坐标系上运行的程序,因此我需要经常使用坐标。我决定使用 Point class 因为它显然可以轻松存储点的坐标。

这个问题在我的程序中无处不在 我将它存储为 intPoint returns 在使用 getX()getY() 方法时加倍。当然,我可以轻松地将它转换为 int,但它看起来不是很优雅,并且给代码增加了不必要的混乱。

直接取值可以吗?像这样:

Point p = new Point(0, 0);
int x = p.x;

而不是:

int x = p.getX();

我什至不确定它是否有任何区别,我只知道 getter 和 setter 存在是有原因的,应该使用。

让,你有2个类。它们是:Class A & Class B

在ClassA中,你有一个私有实例变量。

Class答:

Class A {
    private int a;

    public int getA() {
        return A;
    }

}

现在您想从 Class B 访问 Class A 的名为 a 的变量。但是变量是私有的。所以,现在我们需要 getter 方法,因为 getter 方法是 public.

Class乙:

Class B {
    public void fetchA() {
        A classA = new A();
        int a = classA.getA();
    }
}

在这种情况下,我们需要 getter 个方法。

I'm writing program which operates on coordinate system so I need to use coordinates pretty often. I decided to use Point class because it obviously allows to easily store coordinates of a point.

The problem is everywhere in my program I store it as int whereas Point returns double when using getX() and getY() methods.

您确定它显然允许轻松存储您所在域的点坐标吗?
我不认为。
如果您需要操作一些 java.awt.Point 实例,使用 java.awt.Point classes 是有意义的。

class似乎不​​符合您的需要。

  • 如果实在不需要用java.awt.Point :

您应该创建并使用您自己的 Point class,即 return 的 int 值,当您写 :

int x = p.getX();
  • 如果您改变主意并且碰巧需要使用 java.awt.Point 来完成某些任务:

在自定义 Point class 中,添加方法到 return 一个 java.awt.Point 实例。

@Sarjan 是的......有些人可能会争辩说 setters 和吸气剂是邪恶的。但我想它在各种情况下都非常有用,尤其是在大型项目中。一个示例是验证。比如说,如果你只想在 x 大于 0 时设置它,那么如果它是 public 就不能优雅地执行它(除非你在设置变量之前进行检查......到处都是!!!......乏味吧?? 如果某些新程序员在您的项目上工作并且没有意识到这一点,那么有一天丢失它会使您的系统崩溃)..如果您使用 setter,您可以检查 setter 中它是否大于 0 ] 本身,因此提供了简单的实现!!

PS: 由于太长,我无法发表评论,因此写为答案。

您已链接有关 Point 的文档。因此,请仔细阅读并思考您的问题,而不是开始编写代码和思考,首先想到一个想法。然后了解 java.awt.point class 是否最适合您的情况。

如果它不适合您的情况,您可以实施 class。否则,请遵循文档。遵循文档和 OOP 概念是一种很好的做法。

Point p = new Point(0, 0);

如果您按照文档进行操作,您将看到如下内容:

Point(): Constructs and initializes a point at the origin (0, 0) of the coordinate space.

我认为你对此没有明确的认识。然而,

Point p = new Point();
int x = p.x;

这不是问题,因为 xpublic 并且它是您的程序。但是他们为什么实施了这个:

getX();

同时阅读这些- getters and setters, implementation of Point class