无法转换为 [Ljava.lang.Comparable
cannot be cast to [Ljava.lang.Comparable
所以我需要做动态有序列表。
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)
您忘记了通用参数,<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");
}
T[] tab
的擦除类型将为 Comparable[]
。因此,您需要在构造函数中使用此类型:
public DynArrayListOrd()
{
tab = (T[]) new Comparable[startSize];
}
您还应该首先启用 unchecked
警告以避免此类问题。
所以我需要做动态有序列表。
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)
您忘记了通用参数,<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");
}
T[] tab
的擦除类型将为 Comparable[]
。因此,您需要在构造函数中使用此类型:
public DynArrayListOrd()
{
tab = (T[]) new Comparable[startSize];
}
您还应该首先启用 unchecked
警告以避免此类问题。