1 class test {
2 public static int compare0(Comparable x, Comparable y) {
3 return x.compareTo(y);
4 }
5 public static int compare1(Object x, Object y) {
6 return ((Comparable) x).compareTo((Comparable) y);
7 }
8 public static int compare2(Object x, Object y) {
9 Comparable p = (Comparable) x;
10 Comparable q = (Comparable) y;
11 return (p).compareTo(q);
12 }
13 public static void main(String[] args) {
14 Comparable zero = new Integer(0);
15 Comparable one = new Integer(1);
16 int c = (zero).compareTo(one);
17 }
18 }
未經檢查呼叫編譯上面的代碼產生4個警告:爪哇:到的compareTo(T)
% javac -Xlint:unchecked test.java
test.java:3: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
return x.compareTo(y);
^
test.java:7: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
return ((Comparable) x).compareTo((Comparable) y);
^
test.java:13: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
return (p).compareTo(q);
^
test.java:19: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
int c = (zero).compareTo(one);
^
4 warnings
我嘗試了許多更多的變種,但警告保持。什麼是寫和調用上面的test.compare方法的正確方法?
謝謝!
PS:test.compare只是一個例子;我不需要這樣的功能;但我需要實現一個像test.compare一樣的函數,它需要在其簽名中包含可比較實現的對象。 PS2:我已經編程了25年以上,我甚至在10年前編寫了Java程序一段時間,但現在使用Java(我的工作要求)正在讓我瘋狂。對於一個有經驗的程序員來說,學習Java比看起來更難。有很多東西在學習Java,其中99%至多是過時的,或者是爲編程新手排序(即大量冗長),最壞的情況是徹頭徹尾的垃圾......我還沒有找到引用在Java上,這將讓我快速回答上述問題的答案。
*「我還沒有找到Java的參考資料,可以讓我快速回答上述問題的答案。」*這可能是因爲它是一個非常廣泛的主題,您似乎還沒有開始研究。這裏有一個參考:[Java教程>學習Java語言>泛型 - 簡介](http://download.oracle.com/javase/tutorial/java/generics/generics。html) –
@Mark Peters:事實證明,即使在我編寫上面的代碼之前,我已經閱讀了您鏈接到的引用,並且我發現它有缺陷,因爲我描述的原因很多:詳細,旨在編程(不僅僅是Java)新手,完全基於那些沒有涵蓋專業程序員每天必須處理的情況類型的微不足道的例子等。它當然不會告訴我如何解決這篇文章中描述的問題。我確信這類材料有一個選區,但它不能幫助我。 – kjo