2015-03-31 45 views

回答

1

我只能假設你所要做的是定義一個BinaryTree類,其節點類型爲Integer,所以你寫了類似這樣的東西。

public class BinaryTree<Integer> { 

    // Code 

    public static void main(String args[]) { 
     BinaryTree<Integer> tree = new BinaryTree<Integer>(); 
    } 
} 

在上面的代碼中,Integer沒有它的通常含義。因爲它出現在類名後的尖括號中,所以它實際上是一個類型參數。通常,類型參數具有單字母名稱,但名稱爲Integer是允許的。

由於main方法是靜態的(屬於類,而不是類的單個實例),因此它無法訪問類型參數。這就是爲什麼main的代碼不能編譯的原因。

通過編寫

publie static <Integer> void main(String args[]) 

相反,你可以將這個main方法通用。該方法的類型參數(又稱爲Integer!)隱藏該類的類型參數,並且編譯代碼。

爲了解決這個問題,你可以使類具有類型放慢參數T,或者乾脆完全刪除類的類型參數(如果所有BinaryTree實例有型Integer,沒有必要爲類是通用的話)。

0

我想一個辦法,這可能編譯失敗可能是因爲你有這樣的事情

public class Test<Integer> { 
    public static<Integer> void main(String args []){ 
     Map<Integer, String> aHash = new HashMap<Integer, String>(); 
    } 
} 

並且使用的是「整數」作爲類型參數(這是合法的,雖然可能不是最好的辦法)

現在這樣的工作對於非靜態方法,即

public class Test<Integer> { 
    public void main(String args []){ 
     Map<Integer, String> aHash = new HashMap<Integer, String>(); 
    } 
} 

會很好地編譯,但對於靜態方法,不能使用類類型參數,因爲您會對非靜態類型參數進行靜態引用。

相關問題