Tôi đang gặp khó khăn khi cố gắng tìm ra điều này. Giả sử tôi có mã sau:Java covariance
class Animal { }
class Mammal extends Animal { }
class Giraffe extends Mammal { }
...
public static List<? extends Mammal> getMammals() { return ...; }
...
public static void main(String[] args) {
List<Mammal> mammals = getMammals(); // compilation error
}
Tại sao kết quả gán trong lỗi biên dịch? Lỗi này là một cái gì đó như:
Type mismatch: cannot convert from List<capture#4-of ? extends Mammal> to List<Mammal>
Theo sự hiểu biết của tôi về hiệp phương sai, phương pháp getMammals()
trả về một list
rằng sẽ luôn chứa Mammal
đối tượng nên nó phải được chuyển nhượng. Tôi đang thiếu gì?
+ 1, nhưng bạn có thể giải thích "Danh sách hoặc Danh sách nhưng không phải Danh sách" có nghĩa là gì không ?! : p –
Định dạng lại để loại bỏ 'Danh sách hoặc Danh sách nhưng không gây nhầm lẫn' :-) –
Các generics đã được xử lý như html, đã thoát ra –