繁体   English   中英

Java泛型绑定不匹配

[英]Java Generics Bound mismatch

这是通用搜索算法的实现:

界面:

public interface Comparable<T extends Comparable<T>> {
    int compare(T arg); 
}

CompareSort.java

public abstract class CompareSort<T extends Comparable<T>> {

protected boolean less(T v, T w) {
    return (v.compare(w) < 0);
}

protected void swap(T[] args, int i, int j) {
        T swap = args[i];
        args[i] = args[j];
        args[j] = swap;
}

public abstract void sort(T[] args);

}

算法之一:

public class SelectionSort <T extends Comparable<T>> extends CompareSort<T>  {

@Override
public void sort(T[] args) {
    int N = args.length;
    for (int i = 0; i < N; i++) {
        int min = i;
        for (int j = i + 1; j < N; j++) {
            if (less(args[j], args[min])) {
                min = j;
            }
        }
        swap(args, i, min);
    }
}

}

最后是排序字符串的主要方法。

public class StringSorter {
    public static  <T extends Comparable<T>> void main(String[] args) throws IOException {

        ArrayList<String> list = new ArrayList<String>();

        int i = 0;
        while (i < 10) { 
            Scanner s = new Scanner(System.in); 
            String str = s.nextLine(); 
            list.add(str);
            i++;
        }
        String[] a = list.toArray(new String[list.size()]);

        // Create a sort object, use it on a, and print the sorted array.
        SelectionSort<String> selection = new SelectionSort<String>();
        selection.sort(a);
        for (i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

这是问题所在:

SelectionSort<String> selection = new SelectionSort<String>();

绑定不匹配:字符串类型不是类型SelectionCort(T)的绑定参数(T扩展Comparable(T)的有效替代)

(方括号=弯曲括号)

问题出在哪儿? 我不知道...通用参数T也被扩展了。

与其创建自己的Comparable ,而不是 String 不能实现而是使用Java的java.lang.Comparable ,而String 可以实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM