2012-10-02 93 views
1

我剛剛安裝了jdk1.7.0_07,我突然淹沒了大量關於通用原始類型的警告。 (我收到了數百個,他們混淆了其他可能有意義的警告。)據我所知,這些錯誤不應該生成,並且我沒有使用java-6-openjdk-i386獲取它們。通用類型轉換

我創建了下面的小例子。 (每一類在它自己的文件。)

public interface Generic<T> { 
    public T get(); 
} 

public class Test { 

    public Test safeAsHell(Generic thing, int number) { 
     return new Test(); 
    } 

    public void safeAsHell(Generic thing) { } 

} 

當我嘗試編譯該文件(javac -Xlint),我得到以下警告:

Test.java:3: warning: [rawtypes] found raw type: Generic 
    public Test safeAsHell(Generic thing, int number) { 
         ^
    missing type arguments for generic class Generic<T> 
    where T is a type-variable: 
    T extends Object declared in interface Generic 
Test.java:7: warning: [rawtypes] found raw type: Generic 
    public void safeAsHell(Generic thing) { } 
         ^
    missing type arguments for generic class Generic<T> 
    where T is a type-variable: 
    T extends Object declared in interface Generic 
2 warnings 

添加Object作爲泛型類型參數( Generic<Object> thing)解決了這個問題。我曾認爲類型GenericGeneric<Object>是等效的。我可以忽略一些東西嗎

+0

http://stackoverflow.com/questions/6783316/list-vs-listobject –

回答

2

Generic<Object>是一個參數化類型,而Generic是一個原始類型。這就是警告的原因。

+0

我剛剛檢查了Naftalin和Wadler的_'Java' Generics_的副本,我找不到任何他們沒有添加的情況鍵入參數,所以你可能是正確的。仍然我不明白爲什麼我以前沒有得到這些錯誤(我總是用'-Xlint'編譯)。看起來好像我有很多清理工作要做。 –

+0

@MarcvanDongen:它可能是帶有該javac標誌的開放式jdk。我不確定,但從來沒有使用open-jdk。我不認爲你刪除了一些壓制警告未經檢查的註釋。 –

+0

沒有'-Xlint'標誌我不會收到警告。添加標誌只會迫使'javac'對它認爲不安全的東西非常迂腐。 –