无法转换为[Ljava.lang.Comparable

时间:2016-01-16 13:39:31

标签: java compareto

所以我需要做动态有序列表。

    public class DynArrayListOrd<T extends Comparable<T>>  {
        private T[] tab ;

        public DynArrayListOrd()
        {
          tab = (T[])new Object[startSize];
        }
        ....

        main {
          DynArrayListOrd tab = new DynArrayListOrd();

          tab.add("John");
          tab.add("Steve");
        }

当我运行代码时,我收到错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
    at structures.DynArrayListOrd.<init>(DynArrayListOrd.java:14)
    at structures.DynamicArrayAppp.main(DynArrayListOrd.java:119)

2 个答案:

答案 0 :(得分:2)

T[] tab的已删除类型为Comparable[]。因此,您需要在构造函数中使用此类型:

public DynArrayListOrd()
{
    tab = (T[]) new Comparable[startSize];
}

您还应该首先启用unchecked警告以避免这些问题。

答案 1 :(得分:1)

您忘记了通用参数<String>

DynArrayListOrd<String> tab = new DynArrayListOrd<>();

您的代码必须是:

public class DynArrayListOrd<T extends Comparable<T>>  {
    private List<T> tab ;

public DynArrayListOrd()
{
    tab = new ArrayList<T>();
}
....

public static void main(String[] args){
    DynArrayListOrd<String> tab = new DynArrayListOrd<>();

    tab.tab.add("John");
    tab.tab.add("Steve");
}