Tôi đã cố gắng viết hàm chung loại bỏ các phần tử trùng lặp khỏi mảng.Làm thế nào để tham số kiểu chung nói "mở rộng" Không thể so sánh "thực hiện"?
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
//do quicksort
Arrays.sort(arr);
ArrayList<E> list = new ArrayList<E>();
int i;
for(i=0; i<arr.length-1; i++) {
if(arr[i].compareTo(arr[i+1]) != 0) { //if not duplicate, add to the list
list.add(arr[i]);
}
}
list.add(arr[i]); //add last element
return list;
}
Như bạn có thể thấy bạn không thể chuyển kiểu nguyên thủy như int] mảng vì tôi so sánh các phần tử bằng phương thức compareTo() được xác định trong giao diện Comparable.
tôi nhận thấy dòng đầu tiên (phương pháp kê khai):
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
Tại sao nó nói "kéo dài tương đương"?
So sánh là một giao diện vậy tại sao nó không "triển khai So sánh"? Đây là lần đầu tiên tôi viết chức năng chung nên tôi hơi bối rối về những chi tiết như vậy. (bất kỳ thắc mắc nào sẽ ngăn tôi không hiểu ..)
EDIT: Tìm thấy bài viết này liên quan đến chủ đề này.
http://www.tutorialspoint.com/java/java_generics.htm
vì 'thực hiện mở rộng kéo dài ' –
Có thể trùng lặp của [Generics Java - tại sao" mở rộng T "được cho phép nhưng không" triển khai T "?] (Http://stackoverflow.com/questions/976441/java-generics-why -is-extends-t-allowed-but-not-implements-t) – Lii