Mặc dù câu hỏi này đã được trả lời, vì dòng chủ đề là về ("Các tham số kiểu T đang ẩn kiểu T "), chỉ muốn thêm rằng cảnh báo này không phải lúc nào cũng có nghĩa là có một lớp hoặc kiểu thực" T "được khai báo ở đâu đó trong classpath (hoặc lớp bên trong) như tất cả các câu trả lời/bình luận gợi ý.
xem xét như sau:
public class Cache<K extends Comparable<K>,V> {
private final ConcurrentHashMap<K,V> _concurrentMap = new ConcurrentHashMap<K,V>();
public <K,V> void add(K key ,V value){ // Compiler warning - The type parameter V is hiding type V (as also for K)
_concurrentMap.put(key, value); //Compiler error - K and V passed to add are now being considered different
//from whats declared for _concurrentMap variable
}
public V get(K key){
return _concurrentMap.get(key);
}
public int size(){
return _concurrentMap.size();
}
}
Bởi vì K, V được khai báo ở cấp lớp, phương pháp này cũng thêm "thừa hưởng" nó. Vì vậy, bạn sẽ nhận được cảnh báo tương tự.
Dưới loại bỏ các lỗi cảnh báo và biên dịch tất nhiên
public <E,F> void add(K key ,V value){
_concurrentMap.put(key, value);
}
Và phương pháp ban đầu của tôi là thế này.(Không yêu cầu kiểu generic bổ sung cho phương pháp của tôi)
public void add(K key ,V value){
_concurrentMap.put(key, value);
}
Trong trường hợp của tôi, Eclipse đã tự động nhập 'org.apache.poi.ss.formula.functions.T', điều này đã gây ra cảnh báo. –