![](/img/trans.png)
[英]What is the difference between creating an array object and assigning arrays with curly braces?
[英]Creating an Array of Custom Object Arrays
我在创建包含自定义对象数组的数组时遇到了麻烦。
由于多种原因,我想将容器创建为可比较数组的标准数组:
自定义对象数组有效并且已经过全面测试。
创建较大对象时收到的异常是:
线程“主”中的异常java.lang.ClassCastException:
[Ljava.lang.Comparable; 无法转换为[LSortedFixedCircularArray;
这是适用的代码
//From SortedFixedCircularArray.java
public class SortedFixedCircularArray<E extends Comparable<E>>
{
SortedFixedCircularArray(int fixed_capacity_in)
{
data = newArray(fixed_capacity_in);
front = 0;
rear = 0;
size = 0;
capacity = data.length;
}
@SuppressWarnings("unchecked")
private E[] newArray(int size)
{
return (E[]) new Comparable[size];
}
}
//From CCArray.java
public class CCArray <E extends Comparable<E>>
{
private SortedFixedCircularArray<E>[] data;
private long size;
private long capacity;
private final static long DEFAULT_CAPACITY = 15;
CCArray()
{
this(DEFAULT_CAPACITY);
}
@SuppressWarnings("unchecked")
CCArray(long initial_capacity)
{
int height = getIndices(initial_capacity)[0]+1;
height *= 2;
//!THIS IS THE PROBLEM LINE!
data = (SortedFixedCircularArray<E>[]) new Comparable[height]; //Unchecked Casting
int temp = (height/2)-1;
patternInit(temp);
capacity = initial_capacity;
size = 0;
}
private void patternInit(int height_in)
{
//initialize the individual arrays here
}
private int[] getIndices(long index)
{
//Return int[] with i&j indices
}
}
我假设java将此Object数组视为Object而不是Object数组。 我认为这是一种锯齿状数组,但是如上所述,它不能由相同类型的数组组成,否则会导致其他问题。 请帮忙。
只需将您有问题的行更改为此:
// Unchecked Casting
data = (SortedFixedCircularArray<E>[]) new SortedFixedCircularArray[height];
强制转换是可选的,这也可以:
data = new SortedFixedCircularArray[height];
基本上,混合泛型和数组是一个坏主意。
您可以尝试使用通用列表来索引所有对象,然后仅使用for-each循环来调用和测试它们,但是我不知道这是否对您理想。
我可以肯定地说是因为您没有从SortedFixedCircularArray派生Comparable类,从而导致您无法转换该类型的对象,然后将其引用到Comparable
您可以尝试以下方法:
`class SortedFixedCircularArray<E> extends Comparable<E> {
//In Which This Should Now Work:
data = (SortedFixedCircularArray<E>[]) new Comparable[height];
}
`
问题还可能是您将可比对象作为数组而不是<>引用,这也会导致强制转换异常。
我希望这有帮助 :)
您不能将Comparable对象转换为SortedFixedArray,而可以将SortedFixedArray转换为Comparable。 因此,您可以使用:
data = new SortedFixedCircularArray<E>[height];
您将遇到同样的问题
private E[] newArray(int size) {
return (E[]) new Comparable[size];
}
您为什么不只做new E[size]
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.