当前位置: 首页 > 知识库问答 >
问题:

创建自定义对象数组的数组

翟奇逸
2023-03-14

我在创建包含自定义对象数组的数组时遇到了问题。

出于多种原因,我希望将容器创建为可比较数组的标准数组:

  • 其中包含的每个自定义对象数组必须具有不同的长度
  • 自定义对象数组内置了自动排序工具,这些工具不适合我希望它们适合的较大包含数组

自定义对象数组可以工作,并且已经过彻底测试。

我在创建较大对象时收到的例外情况是:

线程“main”中出现异常java.lang.ClassCastException:

[可比性; 不能投射到 [分类固定圆形阵列;

这是适用的代码

//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数组。我认为这是一种交错数组,但如上所述,它不能由相同类型的数组组成,因为这会导致其他问题。请帮忙。

共有3个答案

汤乐家
2023-03-14

您不能将可比较对象转换为SortedFixedArray,而可以将SortedFixedArray转换为可比较对象。因此,您可以使用:

data = new SortedFixedCircularArray<E>[height];

你也会有同样的问题

private E[] newArray(int size) {
  return (E[]) new Comparable[size];
}

你为什么不直接做new E[size]

阚小云
2023-03-14

您可以尝试使用泛型列表来索引所有对象,然后使用for-each循环来调用和测试它们,但是我不知道这是否适合您。
我相当肯定这是因为您没有从SortedFixedCircularArray派生可比类,进而导致您无法强制转换该类型的对象,然后将其引用到可比
您可以尝试这样做:

`class SortedFixedCircularArray<E> extends Comparable<E> {
     //In Which This Should Now Work:
     data = (SortedFixedCircularArray<E>[]) new Comparable[height];
}  
`

问题也可能是您将可比性引用为数组而不是

希望这有帮助:)

法浩壤
2023-03-14

只要把你有问题的台词改成这样:

// Unchecked Casting
data = (SortedFixedCircularArray<E>[]) new SortedFixedCircularArray[height];

演员阵容是可选的,这也适用于:

data = new SortedFixedCircularArray[height];

基本上混合泛型和数组是一个坏主意。

 类似资料:
  • 问题内容: 说我的课很简单 我希望将此类s 的集合存储在People类的属性中,该属性是类型为Person的数组 也许我做到这一点如下 问题:请问我如何检查people.list是否包含实例alex? 我很想尝试的简单尝试 称一个错误 问题答案: 有两个功能: 编译器在抱怨是因为编译器知道不是,因此需要一个谓词,但不是谓词。 如果阵列中的人员是(不是),则可以使用: 由于它们不相等,因此可以将第二

  • 问题内容: 我如何用对象填充ArrayList,而内部的每个对象都不相同? 问题答案:

  • 问题内容: 我是Java的新手,当时我用Java创建了一系列对象。 例如,我有A类 但这只是创建指向A的指针(引用),而不是4个对象。它是否正确?我看到当我尝试访问创建的对象中的函数/变量时,出现空指针异常。为了能够操作/访问对象,我必须这样做 这是正确的还是我做错了什么?如果这是正确的,那真的很奇怪。 编辑:我觉得这很奇怪,因为在C ++中,你只是说新的A [4],它创建了四个对象。 问题答案:

  • 问题内容: 我正在尝试快速过滤自定义对象的数组,以获取具有我要隔离的属性的数据子集。我的代码如下。 我的自定义对象如下: 但是,尝试编译此代码时,Xcode引发的错误是: 我正在使用Swift 1.2,似乎无法弄清楚自己在做什么。任何帮助,将不胜感激。 问题答案: 在Swift 1.2中,是一个全局函数,因此您不能说。(在Swift 2中,这将起作用。) 此外,不能与此类字符串一起使用。我建议使用

  • 我在TypeScript中创建了一个对象数组: 有人能告诉我怎样才能正确地声明它的类型吗?可以内联还是需要两个定义? 我希望用类型声明替换,以便稍后的TypeScript会在我错误地使用提醒我。

  • 问题内容: 在Swift中,我试图创建一个由64个SKSpriteNode组成的数组。我想先将其初始化为空,然后将Sprites放在前16个单元格中,然后将最后16个单元格中(模拟象棋游戏)。 根据我在文档中了解的内容,我期望会出现以下情况: 要么 但这是行不通的。在第二种情况下,我收到一条错误消息:“尚不支持定长数组”。那可以是真的吗?对我来说,这听起来像是一项基本功能。我需要通过它们的索引直接