Tôi có một chức năng tĩnh đối với ký sau cho một kiểu generic T
Suy luận một kiểu generic từ một kiểu generic trong Java (biên dịch lỗi thời gian)
public static<T> List<T> sortMap(Map<T, Comparable> map)
mà phải trả lại một danh sách các phím bản đồ với một số tài sản .
Bây giờ tôi muốn vượt qua một HashMap chung của loại S
Map<S,Double> map
trong gọi hàm tĩnh trong một lớp học chung, trong đó có bản đồ như là một biến thành viên.
Tôi đã liệt kê một ví dụ mã tối thiểu bên dưới.
Tuy nhiên, tôi nhận được một thông báo lỗi (S
và T
đều T nhưng trong phạm vi khác nhau của mã của tôi, ví dụ: T#1
= T
, T#2
= S
):
required: Map<T#1,Comparable>
found: Map<T#2,Double>
reason: cannot infer type-variable(s) T#1
(argument mismatch; Map<T#2,Double> cannot be converted to Map<T#1,Comparable>)
Làm thế nào có thể giải quyết vấn đề này? Tôi ngạc nhiên rằng Java không cho phép suy ra một kiểu generic từ một kiểu generic. Cấu trúc nào trong Java có thể sử dụng để làm việc với kiểu lập luận mã trừu tượng hơn?
Mã:
public class ExampleClass<T> {
Map<T, Double> map;
public ExampleClass() {
this.map = new HashMap();
}
//the following line produces the mentioned error
List<T> sortedMapKeys = UtilityMethods.sortMap(map);
}
public class UtilityMethods {
public static<T> List<T> sortMap(Map<T, Comparable> map) {
// sort the map in some way and return the list
}
}
Hãy thể hiện mã lớp khán giả. –
'' static'' phương pháp không thể truy cập các biến thành viên; và bạn sử dụng phiên bản java nào? –
Tôi nghĩ bạn sẽ phải thêm một số mã nữa để chúng tôi có thể hiểu được vấn đề. –