Java的靜態內部類

有時候, 使用內部類只是爲了把一個類隱藏在另外一個類的內部,並不需要內部類引用外圍類對象。爲此,可以將內部類聲明爲 static, 以便取消產生的引用。下面是一個使用靜態內部類的典型例子。考慮一下計算數組中最小值和最大值的問題。當然, 可以編寫兩個方法, 一個方法用於計算最小值,另一個方法用於計算最大值。在調用這兩個方法的時候,數組被遍歷兩次。如果只遍歷數組一次, 並能夠同時計算出最小值和最大值,那麼就可以大大地提高效率了。

double min = Double.POSITIVE_INFINITY;
double max = Double.NECATIVE.INFINITY;
for (double v : values){
    if (min > v) min = v;
    if (max < v) max = v;
}
然而, 這個方法必須返冋兩個數值, 爲此, 可以定義一個包含兩個值的類 Pair:
class Pair{
    private double first;
    private double second;
    public Pair(double f, double s){
        first = f;
        second = s;
    }
    public double getFirstO { return first; }
    public double getSecondO { return second; }
}
minmax 方法可以返回一個 Pair 類型的對象。
class ArrayAlg{
    public static Pair minmax(doublet] values){
        return new Pair(min, max) ;
    }
}

當然, Pair 是一個十分大衆化的名字。在大型項目中, 除了定義包含一對字符串的 Pair類之外, 其他程序員也很可能使用這個名字。這樣就會產生名字衝突。解決這個問題的辦法是將 Pair 定義爲 ArrayAlg 的內部公有類。此後, 通過 ArrayAlg.Pair 訪問它:

ArrayAlg.Pair p = ArrayAlg.minmax(d);

不過, 與前面例子中所使用的內部類不同, 在 Pair 對象中不需要引用任何其他的對象,爲此, 可以將這個內部類聲明爲 static:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章