我想用 [0..10] 填充一個 ArrayList,無論它是 Integer 還是 String 傳遞,并且無意中這樣做了:
public class Main {
public static void main(String[] args) {
Task1<String> task1instance = new Task1<>();
System.out.println(task1instance.test());
}
}
public class Task1<T extends Serializable> {
ArrayList<T> array = new ArrayList<>(10);
private void fillArray() { //String and Integer autofill supported
for (Integer i = 0; i < 10; i ) {
array.add((T) i); //magic
}
}
ArrayList<T> test () {
fillArray();
//smartSwap();
System.out.println(this.array.get(0).getClass());
return this.array;
}
我有這樣的輸出:
class java.lang.Integer
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
但總的來說,我通過了一個
<字串>
String 的 ArrayList 填充了 Integer,但是如果我們嘗試直接對其進行強制轉換,則會出現編譯錯誤:
Integer a = 9;
String b = (String) a; //error: Inconvertible types; cannot cast 'java.lang.Integer' to 'java.lang.String'
請告訴我,究竟發生了什么?
uj5u.com熱心網友回復:
不,你不會得到例外。你得到的是來自編譯器的“未經檢查的強制轉換”警告array.add((T) i); //magic,它告訴你這個確切的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363414.html
上一篇:Ktor具體化型別引數
