Đây là jdk1.7.0_04
.Hành vi suy luận kiểu lạ của Collections.emptyList() và/hoặc các phương thức chung Java?
Tôi đã cố gắng sử dụng Collections.emptyList()
hơn new
ing lên danh sách trống của riêng tôi trong một điều kiện:
List<String> list = (anArray != null) ? Arrays.asList(anArray) : Collections.emptyList();
nhưng nhận được lỗi sau:
error: incompatible types
List<String> list = (anArray != null) ? Arrays.asList(anArray) : Collections.emptyList();
^
required: List<String>
found: List<CAP#1>
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ? extends Object
1 error
tôi đã có thể hình dung rằng tôi cần phải thay đổi mọi thứ thành:
List<String> list = (anArray != null) ? Arrays.asList(anArray) : Collections.<String>emptyList();
Nhưng là một phần của công việc về vấn đề này tôi gặp phải sự kỳ lạ (với tôi, anyways) tình hình rằng:
List<String> alwaysEmpty = Collections.emptyList();
biên dịch tốt, nhưng:
List<String> alwaysEmpty = (List<String>) Collections.emptyList();
cung cấp cho các lỗi biên dịch sau:
error: inconvertible types
List<String> alwaysEmpty = (List<String>) Collections.emptyList();
^
required: List<String>
found: List<Object>
What the heck ??
Bây giờ tôi có thể hiểu rằng có lẽ vì lý do kỳ lạ nào đó, việc sử dụng toán tử điều kiện bằng cách nào đó chặn hệ thống suy luận kiểu từ việc nhận ra tham số kiểu cho cuộc gọi emptyList()
phải là String
và do đó cần được chỉ định rõ ràng. Nhưng tại sao chèn một (thừa nhận thừa nhận) đúc những điều lộn xộn lên?