Vấn đề: Tôi đã là một giao diện chức năng Object định nghĩa trong một lớp:Generics: làm thế nào để thực thi hạn chế giữa các phím và các giá trị trong một bản đồ
public static interface FunctionObject<T> {
void process(T object);
}
tôi cần nó chung chung bởi vì tôi muốn sử dụng T phương pháp trong quá trình triển khai.
Sau đó, trong lớp generic khác, tôi đã một bản đồ nơi tôi có các lớp học như chìa khóa và đối tượng chức năng như các giá trị:
Map<Class<T>, FunctionObject<T>> map;
Nhưng tôi cũng muốn bản đồ để chấp nhận các lớp học kiểu phụ và các đối tượng chức năng của siêu kiểu CỦA KEY TYPE, vì vậy tôi đã làm điều này:
Map<Class<? extends T>, FunctionObject<? super T>> map; //not what I need
ý tưởng cơ bản là để có thể sử dụng bản đồ như sau:
//if T were Number, this should be legal
map.put(Class<Integer>, new FunctionObject<Integer>(){...});
map.put(Class<Float>, new FunctionObject<Number>(){...});
map.put(Class<Double>, new FunctionObject<Object>(){...});
như tôi muốn thực thi FunctionObject có loại khóa lớp hoặc siêu kiểu, những gì tôi thực sự muốn xác định là:
Map<Class<E extends T>, FunctionObject<? super E>>> map;
Làm cách nào để đạt được hiệu quả mong muốn? Là một container không đồng nhất typesafe là lựa chọn duy nhất? Các loại bản đồ chung chung sẽ trông như thế nào để cho phép nhập nó từ một tham chiếu?
Có thể hoạt động tùy thuộc vào trường hợp sử dụng. –
Có, nhưng thực hiện nhận được là khi niềm vui bắt đầu XD. –
'get()' chỉ có thể trả về 'FunctionObject