2017-05-27 46 views
-2

我在写坐标系统的程序,所以我需要经常使用坐标。我决定使用Point类,因为它显然允许轻松存储点的坐标。直接获取变量值而不是在Java中使用getter可以吗?

问题是无处不在我的节目,我使用getX()getY()方法时,它存储为int,而Point收益的两倍。当然,我可以轻松地将它投射到int,但它看起来不太优雅,并增加了不必要的混乱代码。

如果我直接获取值,可以吗?就像这样:

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

代替:

int x = p.getX(); 

我甚至不知道这有什么差别,我只知道,getter和setter方法是有原因的,应该被使用。

+0

https://stackoverflow.com/questions/11071407/advantage-of-set-and-get-methods-vs-public-variable –

+3

[set和get方法的优点vs公共变量](https: //堆栈溢出。com/questions/11071407/set-and-get-methods-vs-public-variable) –

+0

@MohamedAneesA我看过这个主题,但是关于创建我自己的类的情况。在我的情况下,类已经存在,不是我的。我只想知道直接获取价值是否是不好的做法。 – sajran

回答

3

我正在写坐标系上运行的程序,所以我需要 使用坐标相​​当频繁。我决定使用Point类,因为 显然允许轻松存储一个点的坐标。

问题是无处不在我的节目,我将其存储为INT而 点使用的getX()和的getY()方法时,返回的两倍。

您确定它明显允许轻松存储您的域的坐标点吗?
我不这么认为。
如果您需要操作某些java.awt.Point实例,则使用java.awt.Point类是有意义的。

该课程似乎不适合您的需求。

  • 如果你真的不需要使用java.awt.Point

应该创建并使用自己的Point类返回int值,当你写:

int x = p.getX(); 
  • 如果您改变了主意,而您碰巧需要使用java.awt.Point进行某些任务:

在自定义Point类中,添加一个方法来返回一个java.awt.Point实例。

+0

很好的答案,谢谢!我不知道为什么,但我认为使用现有课程要比创建一个非常相似的课程好得多。 – sajran

+0

不客气:)有趣的问题。你是对的:使用现有的类比创建非常相似的类要好得多......但是只有当它满足你的需求时。这门课很古老,不太好用。它继承自操作'double'的'Point2D'。如果'Point'也有特定的方法:'getIntX()'和'getIntY()',这并不是一个问题。但它不是他们。所以,只有当你被强制**或者**你可以利用它时,使用'Point'才有意义**(例如,发送一个Point对象给一个现有的或者第三方类来完成任务您)。 – davidxxx

0

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

在A类中,您有一个私有实例变量。

A类:

Class A { 
    private int a; 

    public int getA() { 
     return A; 
    } 

} 

现在您要访问从Class B命名的Class Aa变量。但该变量是私人的。所以,现在我们需要getter方法,因为getter方法是公开的。

B类:

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

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

1

@Sarjan是的......有人可能会认为setters和getters是邪恶的。但我想这在各种情况下都很有帮助,特别是在大型项目中。示例示例是验证。比方说,如果你想只在大于0时设置x,那么如果它是公开的,你就不能高雅地执行它(除非你在设置变量之前有一个检查......任何地方!!! ......单调乏味的权利和失踪如果某个新程序员在你的项目中工作并且不知道这一点,它会在某一天崩溃你的系统)。如果你使用setter,你可以检查它是否在setter本身内部大于0,从而提供简单的实现!

PS:我不能评论这个,因为它太长,因此写作答案。

1

您已链接过关于Point的文档。所以仔细阅读,想想你的问题,而不是开始编码和思考,首先想到一个想法。然后得知java.awt.point班最适合你的情况。

如果它不适合你的情况,你可以实现一个类。否则,请按照文档。遵循文档和面向对象的概念是一种很好的做法。

Point p = new Point(0, 0); 

如果按照文件,你会看到类似这样的:

Point(): 构造并在原点初始化一个点(0,0) 的坐标空间。

我想你对此没有清楚的想法。然而,

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

这不是一个问题,因为xpublic和你的计划。但是,为什么他们已经实现了这一点:

getX(); 

又看了these- getters and settersimplementation of Point class

相关问题