我是一个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
之类的结构(例如 ArrayList
或 LinkedList
)。
然后,您可以只记住给定的 type
对象,如果用户尝试添加一个项目,您将检查 element instanceof type
并仅在返回 true
时添加,否则抛出诸如 IllegalArgumentException
之类的异常。
或者,如上所述,为数组设置一个合适的固定大小。您还可以通过在构造函数中提供 size
参数来向用户提供该选择。
关于java - 如何设置列表的引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240785/