简体   繁体   English

创建自定义数组 class

[英]Creating an array of a custom class

I have created a custom class called ObjectContainer, and am trying to create an array containing those objects.我已经创建了一个名为 ObjectContainer 的自定义 class,并且正在尝试创建一个包含这些对象的数组。 However, when i try to instantiate the array with new ObjectContainer[initialCapacity];但是,当我尝试用new ObjectContainer[initialCapacity];实例化数组时it gives me Generic Array creation error.它给了我通用数组创建错误。 I thus found an answer online that suggests casting an object to it, which i have done因此,我在网上找到了一个答案,建议将 object 投射到它,我已经完成了

(ObjectContainer[]) new Object[initialCapacity];

However, i now get another error但是,我现在收到另一个错误

java.lang.ClassCastException: class [Ljava.lang.Object; java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [LHashSet$ObjectContainer;不能转换为 class [LHashSet$ObjectContainer;
([Ljava.lang.Object; is in module java.base of loader 'bootstrap'; ([Ljava.lang.Object;在加载程序“bootstrap”的模块 java.base 中;
[LHashSet$ObjectContainer; [LHashSet$ObjectContainer; is in unnamed module of loader 'app')在加载程序“app”的未命名模块中)

What do i do to create an ObjectContainer array?我该怎么做才能创建 ObjectContainer 数组?

Edit: Using编辑:使用

(ObjectContainer[]) new ObjectContainer[initialCapacity];

Gives me Generic array creation error.给我通用数组创建错误。

ObjectContainer class:对象容器 class:

private class ObjectContainer extends Object {
    String object;
    private ObjectContainer(String object) {
        this.object = object;
    }

This is implemented within a HashSet class:这是在 HashSet class 中实现的:

public class HashSet<T> implements MultiSet<T>, Iterable<T> {
private ObjectContainer hashTable[];
public LinkedMultiHashSet(int initialCapacity) {

       hashTable = (ObjectContainer[]) new ObjectContainer[initialCapacity];
    }
}

Replace代替

(ObjectContainer[]) new Object[initialCapacity];

by经过

new ObjectContainer[initialCapacity];

as Object cannot be cast to ObjectContainer因为Object无法转换为ObjectContainer

EDIT 1: With provided class, the following code does compile编辑 1:使用提供的 class,以下代码可以编译

public class Main {

    public static void main (String args[]) {
        ObjectContainer[] containers = new ObjectContainer[3];
    }
}

class ObjectContainer extends Object {
    String object;

    private ObjectContainer(String object) {
        this.object = object;
    }
}

EDIT 2: The following code does compile编辑 2:以下代码确实可以编译

public class Main {

    public static void main (String args[]) {
        ObjectContainer[] containers = new ObjectContainer[3];
    }
}

class ObjectContainer extends Object {
    String object;

    private ObjectContainer(String object) {
        this.object = object;
    }
}

interface MultiSet<T> {}
class LinkedMultiHashSet<T> implements MultiSet<T>, Iterable<T> {
    private ObjectContainer hashTable[];
    public LinkedMultiHashSet(int initialCapacity) {
        hashTable = new ObjectContainer[initialCapacity];
    }

    @Override
    public Iterator<T> iterator() {
        return null;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM