Tôi muốn tạo một IdentityHashMap<Class<T>, Consumer<T>>
. Về cơ bản, tôi muốn ánh xạ một kiểu với một phương thức nói phải làm gì với kiểu này.Người tiêu dùng <T> ánh xạ Lớp <T> trong HashMap
tôi muốn tự động có thể nói với các đối tượng X, thực hiện Y. Tôi có thể làm
private IdentityHashMap<Class<?>, Consumer<?>> interceptor = new IdentityHashMap<>();
nhưng nó sucks vì sau đó tôi phải cast đối tượng trong lamba khi sử dụng nó.
Ví dụ:
interceptor.put(Train.class, train -> {
System.out.println(((Train)train).getSpeed());
});
Những gì tôi muốn làm là
private <T> IdentityHashMap<Class<T>, Consumer<T>> interceptor = new IdentityHashMap<>();
Nhưng nó dường như không được cho phép. Có cách nào để làm việc này không ? Cách giải quyết tốt nhất cho các loại bản đồ với phương thức cho loại này là gì?
Đây là một đèn ở bên hông , nhưng lưu ý rằng 'java.lang.Class' định nghĩa bình đẳng là nhận dạng, vì vậy không cần sử dụng' IdentityHashMap' tại đây. – ruakh
@ruakh Không cần sử dụng 'HashMap'. Điều gì sẽ mang lại để có thêm 2 cuộc gọi 'equals' khi so sánh? – Winter
Vui lòng xem http://docs.oracle.com/javase/8/docs/api/java/util/IdentityHashMap.html. Bạn chỉ nên sử dụng 'IdentityHashMap' khi bạn cần nó. – ruakh