Tôi có một phương pháp với chữ ký sau đây:Tại sao Bản đồ không <String, Đặt <String>> khớp với Bản đồ <T, Set<?>>?
public <T> int numberOfValues(Map<T, Set<?>> map)
Tuy nhiên tôi không thể gọi nó đi qua trong một Map<String, Set<String>>
. Ví dụ, sau đây không biên dịch:
Map<String, Set<String>> map = new HashMap<>();
numberOfValues(map);
Các thông báo lỗi được rằng:
numberOfValues (java.util.Map<java.lang.String,java.util.Set<?>>) in class cannot be applied to (java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)
Tuy nhiên, nếu tôi thay đổi như sau tất cả là tốt:
public <T, V> int numberOfValues(Map<T, Set<V>> map)
Tuy nhiên Tôi hoàn toàn không quan tâm đến V
, vì tôi chỉ muốn biết kích thước của từng bộ.
Vì đầy đủ, đây là toàn bộ phương pháp:
public <T, V> int numberOfValues(Map<T, Set<V>> map) {
int n = 0;
for (T key : map.keySet()) {
n += map.get(key).size();
}
return n;
}
nào Tôi biết nó cũng có thể được thực hiện như thế này, nhưng không phải là quan điểm của câu hỏi :)
public <T> int numberOfValues(Map<?, Set<T>> map) {
int n = 0;
for (Set<T> value : map.values()) {
n += value.size();
}
return n;
}
cập nhật: chưa một cách khác để đạt được cùng một
public <T> int numberOfValues(Map<?, Set<T>> map) {
int n = 0;
for (Object key : map.keySet()) {
n += map.get(key).size();
}
return n;
}
cập nhật cuối cùng: Nhờ câu trả lời Jorn, đây là việc thực hiện cuối cùng ...
public int numberOfValues(Map<?, ? extends Set<?>> map) {
int n = 0;
for (Set<?> value : map.values()) {
n += value.size();
}
return n;
}
Bạn đã không được hiển thị như thế nào bạn đang cố gắng gọi phương thức, mà làm cho nó khó khăn để giúp bạn. Vui lòng cung cấp [mcve]. –
Đã sửa, tôi đã thêm đoạn mã về cách thức phương thức được gọi với một bản đồ trống. – Alf
Và không thể 'map.get (key)' return 'null'? –