gpt4 book ai didi

java - 扩展列表的 ArrayList

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:10 25 4
gpt4 key购买 nike

为什么不能做这样的事情?

RowList<List<Value>> extends ArrayList<List<Value>>

另外,这怎么可能呢?

RowList<Value> extends ArrayList<List<Value>>

我正在尝试实现一个 List 以在 database 中使用,并且想扩展 ArrayList 所以我能够检查 .add()、.set() 等方法是否违反了 Database 的要求(不添加具有相同键的两行等)。我意识到这可能不是实现 database 的最佳方式,但这是一项要求我们以这种方式完成的大学作业。

编辑:使用第二个选项(编译),如何访问 RowList 类持有的列表中的值?

最佳答案

以下两行(对编译器而言)是相同的,即使您有一个名为 Value 的类也是如此因为命名参数将屏蔽类类型

class RowList<Value> extends ArrayList<List<Value>>

class RowList<T> extends ArrayList<List<T>>

这是因为第一个 <> 中的值是命名类型参数。所以当你尝试做类似的事情时

class RowList<List<Value>> extends ArrayList<List<Value>>

您试图创建命名类型参数 List<Value> which (in Java) is an invalid identifier, but you will get a error like Syntax error on token(s), misplaced construct(s)

我认为你实际上是想写

public class RowList extends ArrayList<Value> {

@Override
public boolean add(Value e) {
// TODO Custom code to check and what not
return super.add(e);
}
}

在哪里Value是您的代码库中的自定义对象。然后在你的代码的其他地方你可以这样做:

RowList rl = new RowList();
rl.add(new Value(...));
Value v = rl.get(i);

编辑:

前面的例子假设 Value类是数据的条目行。相反,如果它是单个数据项,并且该行由 List 表示那么它将更像以下内容:

public class RowList extends ArrayList<List<Value>> {

@Override
public boolean add(List<Value> e) {
// TODO Custom code to check and what not
return super.add(e);
}
}

RowList rl = new RowList();
List<Value> row = new ArrayList<Value>();
row.add(new Value(...));
rl.add(row);
List<Value> rowGet = rl.get(i);

关于java - 扩展列表的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com