Trong khi tôi đang cố gắng giải quyết tập thể dục from generics tutorial Q&A câu trả lời của tôi là hơi khác nhauLàm thế nào để viết một phương pháp chung để tìm phần tử tối đa và gọi phương thức đó?
Đáp My
public static <T extends Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) //Option1
public static <T extends Comparable<T>>
T max(List<? extends T> list, int begin, int end) //Option2
từ câu trả lời trích dẫn dưới đây
Vì vậy, câu hỏi của tôi là
OPTION1 : Nó sẽ tạo ra bất kỳ sự khác biệt nào nếu
T extends Object & Comparable<? super T>
được thay thế bằngT extends Comparable<? super T>
. Không phải làextends Object
tiềm ẩn?Option2: Có sự khác biệt nào nếu
Comparable<? super T>
được thay thế bằngComparable<T>
? nếu như vậy như thế nào?Hoàn thành mã Eclipse tạo biến cục bộ
List<? extends Comparable<? super Comparable<? super T>>> list;
trên Ctrl + 1max(list, 1, 10);
dài một chút. Làm thế nào để xác định một lớp học (phân cấp) mở rộngComparable<? super T>
, tạo danh sách và thêm trường hợp vào danh sách và gọi phương thức dưới đây? Về cơ bản tôi muốn biết làm thế nào để gọimax()
sau khi thêm trường lớpA or B
vào một danh sách nơiclass B extends A
Viết một phương pháp tổng quát để tìm các phần tử tối đa trong phạm vi [bắt đầu, kết thúc) của một danh sách.
Trả lời:
import java.util.*;
public final class Algorithm {
public static <T extends Object & Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) {
T maxElem = list.get(begin);
for (++begin; begin < end; ++begin)
if (maxElem.compareTo(list.get(begin)) < 0)
maxElem = list.get(begin);
return maxElem;
}
}
Được trả lời một phần tại đây: http://stackoverflow.com/questions/10339338/t-extends-object-e-vs-t-extends-e –
Tôi thực sự không hiểu câu hỏi thứ 3 của bạn. Bạn có thể xây dựng nó một chút không? –
Đối với lời gọi phương thức nào thì eclipse tạo biến cục bộ đó? Tôi không hiểu tại sao nó lại làm như vậy. Ít nhất kiểu lồng nhau có thể so sánh được thực sự không hợp lý ở đây. –