Tôi đang sử dụng lớp ổi TypeToken
ổi để kiểm tra xem trường hợp của một loại tùy ý có thể được gán cho các đối tượng thuộc loại khác không.Tìm hiểu Type_Token.isAssignable của GuavaTừ phương thức
Trong đoạn mã sau đây, tôi đang thử nghiệm nếu loại khai báo là List
là chuyển nhượng từ List<String>
, và ngược lại:
TypeToken rawListType = new TypeToken<List>(){};
TypeToken parameterizedListType = new TypeToken<List<String>>(){};
System.out.println(rawListType.isAssignableFrom(parameterizedListType)); //true
System.out.println(parameterizedListType.isAssignableFrom(rawListType)); //false
Tại sao cuộc gọi thứ hai để isAssignableFrom
lợi nhuận false
, cho rằng đoạn code dưới đây biên dịch , vì vậy tôi có thể gán List<String>
từ List
(với một cảnh báo):
List l = null;
List<String> l2 = null;
l = l2;
l2 = l; //Type Safety Warning
trực giác của tôi là ổi được trả lời nếu ins tances của các loại này được gán mà không có cảnh báo (?). Nếu đó là chính xác, làm thế nào tôi có thể kiểm tra khả năng chuyển nhượng theo nghĩa của trình biên dịch cho phép tôi gán một đối tượng cho một đối tượng khác (có hoặc không có cảnh báo), giống như nó được hiển thị trong đoạn mã thứ hai?
hi @Paul. Nó không phải là chính xác những gì tôi đang tìm kiếm, nếu tôi kiểm tra khả năng gán kiểu thô, thì Danh sách sẽ được chuyển nhượng từ Danh sách và cứ như vậy, và điều này là không chính xác. Tôi đang tìm kiếm một cách để xác minh khả năng chuyển nhượng ngay cả trong trường hợp trình biên dịch sẽ phải thêm các phôi ngầm ẩn sau sân. –
Sergio
Đã hiểu - hãy xem cập nhật của tôi. –
giải pháp của bạn có vẻ đúng với tôi, bạn có biết tại sao TypeToken không làm điều này không? Ít nhất họ cũng nên ghi lại rằng trong phương pháp javadoc tôi nghĩ. – Sergio