Dưới đây là một đoạn mã:Tại sao có thể lấy lại một đối tượng "không đúng kiểu" từ Danh sách tham số trong Java?
import java.util.*;
class Test
{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
addToList(list);
Integer i = list.get(0); //#1 fails at run-time
String s = list.get(0); //#2 fails at compile-time
list.get(0); //#3 works fine
System.out.println(list.get(0)); //#4 works fine, prints "string"
}
static void addToList(List list){
list.add("string");
}
}
Tôi hiểu tại sao là nó có thể chèn một đối tượng của lớp String trong Danh sách parametrized.
Có vẻ như tôi hiểu tại sao mã được đánh dấu bằng #1
và #2
không thành công.
Nhưng tại sao #3
và #4
hoạt động? Theo như tôi hiểu, trình biên dịch thêm các phôi thích hợp sau khi xóa, vì vậy khi tôi gọi list.get(0)
, phương thức này sẽ trả về một đối tượng trước đó được đúc thành Số nguyên. Vậy tại sao không có ClassCastException xảy ra ở # 3 và # 4 tại thời gian chạy?
Vì không phải tất cả các danh sách 'Danh sách' của bạn đều được parametrized :) –