Tôi không hiểu tại sao điều này confuses trình biên dịch. Tôi đang sử dụng chung loại T
để giữ một đối tượng mà không liên quan đến các put
và get
phương pháp. Tôi luôn nghĩ rằng GenericClass
và GenericClass<Object>
có chức năng giống hệt nhau, nhưng tôi phải nhầm lẫn. Khi biên soạn lớp DoesntWork
tôi nhận được incompatible types - required: String - found: Object
. Lớp Works
làm những gì tôi mong đợi. Những gì đang xảy ra ở đây?Tại sao lớp này hoạt động khác khi tôi không cung cấp loại chung?
public class GenericClass<T> {
public <V> void put(Class<V> key, V value) {
// put into map
}
public <V> V get(Class<V> key) {
// get from map
return null;
}
public static class DoesntWork {
public DoesntWork() {
GenericClass genericClass = new GenericClass();
String s = genericClass.get(String.class);
}
}
public static class Works {
public Works() {
GenericClass<Object> genericClass = new GenericClass<Object>();
String s = genericClass.get(String.class);
}
}
}
'genericClass' gần với' genericClass > 'hơn là' genericClass
Điều đó đang được nói, tôi không thể thấy tại sao' DoesntWork' không hoạt động. –
Hãy thử buộc loại: 'genericClass. nhận được (String.class) '(không chắc chắn đó là đúng cú pháp) –