直接获取变量值而不是在Java中使用getter可以吗?
Is it ok to get variable value directly instead of using getter in Java?
我正在编写在坐标系上运行的程序,因此我需要经常使用坐标。我决定使用 Point
class 因为它显然可以轻松存储点的坐标。
这个问题在我的程序中无处不在 我将它存储为 int
而 Point
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;
这不是问题,因为 x
是 public
并且它是您的程序。但是他们为什么实施了这个:
getX();
同时阅读这些- getters and setters, implementation of Point class。
我正在编写在坐标系上运行的程序,因此我需要经常使用坐标。我决定使用 Point
class 因为它显然可以轻松存储点的坐标。
这个问题在我的程序中无处不在 我将它存储为 int
而 Point
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;
这不是问题,因为 x
是 public
并且它是您的程序。但是他们为什么实施了这个:
getX();
同时阅读这些- getters and setters, implementation of Point class。