ComByLen已被定义   泛型檫除  即CombyLen<String>经过檫除后变为ComByLen  所以会出现ComByLen已定义错误

解决方案 »

  1.   

    抱歉,我没说清楚问题;
    下面是源代码
    [code=javaimport java.util.List;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    public class CollectionsDemo2
    {
    public static void main(String[] args){
    demo1();
    }
    public static void demo1(){
    List<String> list=new ArrayList<String>();
    list.add("ags");
    list.add("edn");
    list.add("afdb");
    list.add("adsn");
    list.add("ab");

    System.out.println(list);
    mySort(list);
    //Collections.sort(list);
    System.out.println(list);
    mySort2(list,new ComByLen());//Collections.sort(list,new ComByLen());
    System.out.println(list);

    }
    public static <T> void mySort2(List<T> list,Comparator<? super T> com){
    for(int i=0;i<list.size()-1;i++){
    for(int j=i;j<list.size();j++){
    if(com.compare(list.get(i),list.get(j))>0){
    T temp=list.get(i);
    list.set(i,list.get(j));
    list.set(j,temp);
    }
    }
    }
    }
    public static<T extends Comparable<? super T>> void mySort(List<T> list){
    for(int i=0;i<list.size()-1;i++){
    for(int j=i;j<list.size();j++){
    if(list.get(i).compareTo(list.get(j))>0){
    T temp=list.get(i);
    list.set(i,list.get(j));
    list.set(j,temp);
    }
    }
    }
    }
    }
    class ComByLen<String> implements Comparator<String>
    {
    public int compare(String s1,String s2){
    int temp=s1.length()-s2.length();
    return temp==0?s1.compareTo(s2):temp;

    }
    }][/code]---------- JAVAC ----------
    CollectionsDemo2.java:52: 错误: 找不到符号
    int temp=s1.length()-s2.length();
               ^
      符号:   方法 length()
      位置: 类型为String的变量 s1
      其中, String是类型变量:
        String扩展已在类 ComByLen中声明的Object
    CollectionsDemo2.java:52: 错误: 找不到符号
    int temp=s1.length()-s2.length();
                           ^
      符号:   方法 length()
      位置: 类型为String的变量 s2
      其中, String是类型变量:
        String扩展已在类 ComByLen中声明的Object
    CollectionsDemo2.java:53: 错误: 找不到符号
    return temp==0?s1.compareTo(s2):temp;
                     ^
      符号:   方法 compareTo(String)
      位置: 类型为String的变量 s1
      其中, String是类型变量:
        String扩展已在类 ComByLen中声明的Object
    注: CollectionsDemo2.java使用了未经检查或不安全的操作。
    注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
    3 个错误输出完成 (耗时 1 秒) - 正常终止
      

  2.   

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    public class CollectionsDemo2
    {
    public static void main(String[] args){
    demo1();
    }
    public static void demo1(){
    List<String> list=new ArrayList<String>();
    list.add("ags");
    list.add("edn");
    list.add("afdb");
    list.add("adsn");
    list.add("ab");

    System.out.println(list);
    mySort(list);
    //Collections.sort(list);
    System.out.println(list);
    mySort2(list,new ComByLen());//Collections.sort(list,new ComByLen());
    System.out.println(list);

    }
    public static <T> void mySort2(List<T> list,Comparator<? super T> com){
    for(int i=0;i<list.size()-1;i++){
    for(int j=i;j<list.size();j++){
    if(com.compare(list.get(i),list.get(j))>0){
    T temp=list.get(i);
    list.set(i,list.get(j));
    list.set(j,temp);
    }
    }
    }
    }
    public static<T extends Comparable<? super T>> void mySort(List<T> list){
    for(int i=0;i<list.size()-1;i++){
    for(int j=i;j<list.size();j++){
    if(list.get(i).compareTo(list.get(j))>0){
    T temp=list.get(i);
    list.set(i,list.get(j));
    list.set(j,temp);
    }
    }
    }
    }
    }
    class ComByLen<String> implements Comparator<String>
    {
    public int compare(String s1,String s2){
    int temp=s1.length()-s2.length();
    return temp==0?s1.compareTo(s2):temp;

    }
    }
    ---------- JAVAC ----------
    CollectionsDemo2.java:52: 错误: 找不到符号
    int temp=s1.length()-s2.length();
               ^
      符号:   方法 length()
      位置: 类型为String的变量 s1
      其中, String是类型变量:
        String扩展已在类 ComByLen中声明的Object
    CollectionsDemo2.java:52: 错误: 找不到符号
    int temp=s1.length()-s2.length();
                           ^
      符号:   方法 length()
      位置: 类型为String的变量 s2
      其中, String是类型变量:
        String扩展已在类 ComByLen中声明的Object
    CollectionsDemo2.java:53: 错误: 找不到符号
    return temp==0?s1.compareTo(s2):temp;
                     ^
      符号:   方法 compareTo(String)
      位置: 类型为String的变量 s1
      其中, String是类型变量:
        String扩展已在类 ComByLen中声明的Object
    注: CollectionsDemo2.java使用了未经检查或不安全的操作。
    注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
    3 个错误输出完成 (耗时 1 秒) - 正常终止