2017-05-27 87 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

相關問題