2011-10-27 64 views
3

我這樣做了很多在我的代碼,有很多二維座標的工作原理:的Java:從一個方法調用返回兩個整數

int[] getSize() { 
    int[] res = {gridRows, gridColumns}; 
    return res; 
} 

我知道,我可以定義一個很小的類,並得到類型安全,但我還沒有,因爲它讓我感到在它自己的一個小的.java文件中有這樣一個微不足道的類,我必須將它合併到我的代碼中。

你認爲這是醜陋,壞,還是邪惡?或者你也這樣做?

回答

0

不幸的是,在java中,這實際上是返回多個值的最好方法。我通常使用數組或列表。我不一定認爲這是一種「糟糕的形式」,本身就是爲它創建一個班級,但這是不必要的。

12

如果您的項目中有一個想要封裝的概念,例如,這兩個整數是座標,那麼爲它們設置類沒有任何問題。在我看來,這是很清潔,然後迫使每個人都創建一個數組等。

例如,是否有人在同一個項目中開發並調用你的方法,你認爲它更清晰的獲得一個int數組兩個位置,還是稱爲座標的對象?另外,你可能想要實現比較座標的東西,如果你使用了一個類,它可以用正確的OO方式封裝。 (如果你重新定義了類似的東西,請記得尊重Object contract)。

2

,你可以將它定義爲一個嵌套的靜態類

更不用說類將允許更多的(例如定義操作的2D 1點座標,把它們放在一個組(等於沒有按」 t就像陣列上那樣工作))

3

在這種情況下,您可以使用Point。一般而言,除了美學之外,通常有足夠的微不足道的輔助方法涉及到類似的事情,因此讓它成爲一個類來保存它們是有意義的,而不是將邏輯分散到各處。有時甚至只需要一個很好的toString()來進行調試和記錄就足夠了。

在需要非常高的性能的地方,請將高流量的簡單輔助方法作爲最終的方法,以便它們可以內聯。

潛在成員的唯一共同點是他們是由一個函數返回的,如果你能看到他們有更多共同點的未來,那麼肯定會創建一個類。

在某些情況下,請考慮返回void,並傳入某種類型的較大範圍的上下文對象,方法可以在該對象上設置返回值。這應該謹慎使用 - 它可以很容易地導致耦合蠕變。

0

鑑於Java無法從方法返回多個值,因此您所做的只是返回相同類型的多個值的唯一選擇。如果這些值來自不同類型,則必須編寫一個小類(一個排序值對象)來封裝返回值。

另一個甚至最醜陋的選擇是將數組作爲參數傳遞,並在那裏留下返回值 - 這是一種用於模擬Java中的傳遞引用的黑客攻擊。非常氣餒。

1

您可以創建一個內部類來保存方法的返回值。這具有不需要新的.java文件的優勢:

public class Parent{ 
    public Size getSize() { 
    return new Size(gridRows, gridColumns); 
    } 

    public static class Size{ 
    //... 
    } 
} 

Parent parent = new Parent(); 
Parent.Size size = parent.getSize(); 

定義類爲「靜態」基本上意味着它是可以治療的,就像一個普通的類(除非你必須使用Parent.Size代替Size) 。如果該類不是「靜態」的,那麼如果沒有外部類的實例,就不能創建它的新實例。

相關問題