请帮忙看看下面这个程序,javac编译时说Collections.sort(strList)报错,说“找不到符号”,可是错在哪里呢
import java.util.Collections;
import java.util.ArrayList;public class TreeTester
{
public static void main(String[] args)
{
BinarySearchTree<String> names =
new BinarySearchTree<String>();

names.add("Romeo");
names.add("Juliet");
                   names.add("Tom");
                   names.add("Dick");
                  names.add("Harry");
    
                  names.print();
                  System.out.println("Expected:Dick Harry Juliet Romeo Juliet");
          }
}class BinarySearchTree<T>
{
private ArrayList<T> strList;
public BinarySearchTree()
{
strList = new ArrayList<T>();
}

public void add(T str)
{
strList.add(str);
}

public void strsort()
{
Collections.sort(strList);
}

public void print()
{
strsort();
System.out.print(strList);
}
}

解决方案 »

  1.   


    class BinarySearchTree<T extends Comparable<? super T>> {
    private List<T> strList; public BinarySearchTree() {
    strList = new ArrayList<T>();
    } public void add(T str) {
    strList.add(str);
    } public void strsort() {
    Collections.sort(strList);
    } public void print() {
    strsort();
    System.out.print(strList);
    }
    }
      

  2.   

    class BinarySearchTree<T extends Comparable<? super T>> {
        private List<T> strList;
    为什么要这样写呢,ArrayList里如果放的是String类对象,String 不是已经imlements comparable了吗
      

  3.   


    API:public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。
      

  4.   

    Collections.sort方法的javadoc里明确规定T的类型必须符合T extends Comparable<? super T>
    static <T extends Comparable<? super T>> void sort(List<T> list) 
    而你的class定义class BinarySearchTree<T>是随便的一个T
    你这个泛型T是否实现了Comparable接口谁知道,你只是后期实例化的时候用了String,String是实现了Comparable接口,但是如果用其它类呢?其他类一定能保证实现了Comparable接口吗?这里要注意,你用的是泛型,所以Collections.sort(strList);是按泛型去解析的,因为编译时,编译器根本不知道你后来会用String去实例化。也就是说,先有方法Collections.sort(strList)的编译,才会有你后来调用方法的具体参数化,而你想在的想法刚好倒过来,先有方法调用的参数化,才有方法代码的编译,这可能吗?不编译你又哪来的调用,既然是编译,它又如何知道你后来一定就是使用String?