我正在尝试使用 Java Lists 创建一个延迟加载方法,该方法接受索引,将元素添加到 List 直到索引有效,然后返回该索引处的值。
例如,假设我有一个这样的列表[0, 1, 2, 3]
。如果我用它调用我的方法并传入索引 1,它应该返回 1 而不会以任何方式更改 List。如果我用它调用我的方法并传入索引 5,它应该返回 0(默认整数值)并且我的 List 现在应该看起来像这样[0, 1, 2, 3, 0, 0]
。
一开始实现起来似乎很简单,但是当我尝试传入像List<List<String>>
. 我知道你不能实例化一个列表,所以我尝试制作一个 ArrayList,但它不起作用。
这是我的方法的当前化身
protected <T> T getOrCreateAt(int index, List<T> list, Class<T> elementClass) {
while (list.size() < index + 1) {
try {
list.add(elementClass.newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
System.exit(1);
} catch (IllegalAccessException e) {
e.printStackTrace();
System.exit(1);
}
}
return list.get(index);
}
这是我称之为的一个地方
List<List<String>> solutionText = new ArrayList<List<String>>();
for (Node node : solution) {
List<String> row = getOrCreateAt(node.rowNo, solutionText, ArrayList.class);
getOrCreateAt(node.colNo, row, String.class);
row.set(node.colNo, String.valueOf(node.cellNo));
}
对 getOrCreateAt 的第二次调用有效,但第一次没有编译。
如何让我的延迟加载方法在接口和抽象类上工作?