我有兩個班。其中一個類(Class_1)的有一個返回列表的方法:爲什麼我在這裏沒有安全或不安全的操作?
class Class_1{
....
public List<String> method_1(){
Statement st = null;
ResultSet res = null;
List<String> tables = new ArrayList<String>();
try {
st = this.cnx.createStatement();
res = st.executeQuery("SHOW TABLES");
while(res.next()){
tables.add(res.getString(1));
}
}
catch(Exception e){
e.printStackTrace();
}
return tables;
}
}
當我編譯這個(Class_1)班,我沒有得到任何錯誤或警告。但我有另一班Class_2,它使用這個第一類。在這第二類我的代碼,這樣行:
class Class_2{
public static void main(String args[]){
Class_1 c = new Class_1();
List<String> some_list = c.method_1();
}
}
當我做以上(Class_2)之類的編輯,我現在得到這些警告,說我不喜歡壓抑:
注:Class_2.java使用未經檢查或不安全的操作
注:與-Xlint重新編譯:未選中的細節
我不知道爲什麼我得到這些電子因爲在我看來,一切都應該沒問題 - 一種方法顯然只返回List<String>
,另一段代碼試圖將此列表分配給類型爲List<String>
的變量。我看不到,這裏有什麼不安全的。
編輯
當我編譯我的Class_1與-XLint:unchecked
我得到:
列表some_list = c.method_1();
^
要求:列表[字符串]
發現:名單
這是爲什麼?
編輯
我做了一些調查,發現,整個問題是在這一行:
tables.add(res.getString(1));
這似乎是一個字符串,但是編譯器不喜歡這一點。所以,如果我簡單地切換到:
tables.add("Some real string");
然後我得不到任何警告。真奇怪。
我覺得有些東西你沒有告訴我們。你能包括更多細節嗎? –
這看起來像你可能已經修剪你的代碼太多了。難道說Class_1實際上是一個類的參數嗎?如果你不提供這些,你也會得到這些錯誤 – Vogel612
不,這些不是gerenric類。這是兩個非常簡單的類。 – Jacobian