java - 如何设置列表的引用类型?

标签 java types casting

我是一个Java新手。我需要定义一个构造函数 MyArrayList(Object type) 来设置稍后添加到列表中的引用类型。

构造函数的签名无法更改。另外,我不允许使用泛型

我尝试这样做:

public class MyArrayList implements MyList {
private Object[] theList; // array of objects


public MyArrayList(Object type) {
    theList = new type[0];

}

并得到一个编译错误,因为 type 不是类。正确的做法是什么?

最佳答案

正如您所说,您不想使用泛型,您可以通过Array#newInstance ( documentation ) 动态创建数组。这是您调整后的代码:

public class MyArrayList implements MyList {
    private Object[] theList;

    public MyArrayList(Object type) {
        // Adjust as you like
        int size = 0;
        // Dynamically create array of type "type"
        theList = (Object[]) Array.newInstance(type.getClass(), size);
    }
}

由于您在编译时不知道该类,因此只能将其用作Object[],但是一旦类型已知,它在运行时只允许使用type真实类型的元素,而不是任意Object

<小时/>

请注意,数组具有固定大小。您不能只是向其中添加元素,大小始终是固定的并且必须提前知道。如果您需要更动态的结构,请使用诸如 List 之类的结构(例如 ArrayListLinkedList)。

然后,您可以只记住给定的 type 对象,如果用户尝试添加一个项目,您将检查 element instanceof type 并仅在返回 true 时添加,否则抛出诸如 IllegalArgumentException 之类的异常。

或者,如上所述,为数组设置一个合适的固定大小。您还可以通过在构造函数中提供 size 参数来向用户提供该选择。

关于java - 如何设置列表的引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240785/

相关文章:

c# - 类型转换和解析之间的区别?

java - 可定制的Java应用程序想法

ruby-on-rails - 为什么 Rails 模型关联结果自然不是 ActiveRecord::Relations?

haskell - 使 (a, a) 成为仿函数

Pandas :将对象转换为 str

javascript - 将普通对象转换为javascript中的类实例

java - 如何跳出涉及 hasNextLine() 的 while 循环?

java - JGoodies FormLayout 和 JWindow

java - Room迁移仅在多个表的主键上添加@NonNull注释

c++ - 为什么 unsigned int 0xFFFFFFFF 等于 int -1?