Liên quan đến câu hỏi that.Tại sao chúng ta không thể chụp các ký tự đại diện cho phương thức với hai tham số?
Tôi biết về ký tự đại diện. Ví dụ, sau đây có thể được sử dụng để đảo ngược một danh sách:
public static void reverse(List<?> list) { rev(list); } //capturing the wildcard
private static <T> void rev(List<T> list) {
List<T> tmp = new ArrayList<T>(list);
for (int i = 0; i < list.size(); i++) {
list.set(i, tmp.get(list.size()-i-1));
}
}
Bây giờ tôi đang cố gắng để viết điều tương tự cho rằng loại tình huống:
private int compare (Comparable<?> upper, Comparable<?> lower){
return comp(upper, lower); //The method comp(Comparable<T>, Comparable<T>) is not applicable for the arguments (Comparable<capture#5-of ?>, Comparable<capture#6-of ?>)
}
private <T> int comp(Comparable<T> upper, Comparable<T> lower){
return upper.compareTo((T) lower);
}
tôi mong đợi rằng nó đã được biên soạn tốt cũng. Có thể chụp wildacrds cho các phương thức có hai hoặc nhiều tham số theo cách đó không?
Vì vậy, chúng ta chỉ có thể thêm thông số kiểu socnd vào phương thức so sánh. Nhưng nó sẽ trông rất không an toàn. Chúng ta sẽ gặp phải những vấn đề gì với điều đó? – user3663882
Tôi có nghĩa là 'private int comp (so sánh ở trên, so sánh thấp hơn) ' –
user3663882
Nếu bạn muốn chia sẻ kiểu-tham số giữa các phương thức, hoặc làm cho kiểu tham số kiểu lớp, hoặc giới thiệu cùng một giới hạn trên cho cả hai chúng. –