无法强制转换为[Ljava.lang.Compariable]

无法强制转换为[Ljava.lang.Compariable],java,compareto,Java,Compareto,所以我需要做动态排序列表 public class DynArrayListOrd<T extends Comparable<T>> { private T[] tab ; public DynArrayListOrd() { tab = (T[])new Object[startSize]; } .... main { D

所以我需要做动态排序列表

    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");
        }
公共类dynarrayStord{
私人T[]选项卡;
公共DynArrayListOrd()
{
tab=(T[])新对象[startSize];
}
....
主要{
DynArrayListOrd选项卡=新的DynArrayListOrd();
表3.添加(“约翰”);
添加标签(“史蒂夫”);
}
当我运行代码时,我得到一个错误:

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)
线程“main”java.lang.ClassCastException:[Ljava.lang.Object;中的异常;无法转换为[Ljava.lang.Compariable; 在structures.DynArrayListOrd.(DynArrayListOrd.java:14) at structures.DynamicArrayAppp.main(DynArrayListOrd.java:119)
您忘记了泛型参数,

DynArrayListOrd选项卡=新建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");
}
公共类dynarrayStord{
私有列表选项卡;
公共DynArrayListOrd()
{
tab=新的ArrayList();
}
....
公共静态void main(字符串[]args){
DynArrayListOrd选项卡=新的DynArrayListOrd();
tab.tab.添加(“John”);
tab.tab.添加(“Steve”);
}

被擦除的
T[]选项卡的类型将是
可比较的[]
。因此,您需要在构造函数中使用此类型:

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

您还应该启用未选中的
警告,以避免出现此类问题。

您应该在编译时看到警告!可能重复的强制转换实际上不会转换任何
对象
。因此
(t[])新对象[…];
不会生成
t[]
。该代码将产生与上述代码相同的错误。该错误将被抛出构造函数。
(T[])新对象[startSize];
不会神奇地将
对象[]
变为
T[]
。请删除或更正答案。是的,仍然相同:/@szufi搜索类似“通用数组创建”的内容.我已经将问题标记为重复,只要看一看我选为重复的帖子就可以了。一个根本错误的答案怎么会得到一次投票?