【问题标题】:Extending an ArrayList of Lists扩展列表的 ArrayList
【发布时间】:2013-05-19 14:42:51
【问题描述】:

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

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

另外,怎么可能做到这一点?

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

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

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

【问题讨论】:

  • RowList&lt;T&gt; extends ArrayList&lt;List&lt;T&gt;&gt; 呢?
  • @Supericy 这很好,是的,但不是我想做的。
  • 为什么首先要扩展ArrayList?看起来像代码味道。
  • 顺便说一句,如果您不想在Collection 中重复项目,请使用java.util.Set
  • @LuiggiMendoza:问题是以下代码不起作用:import java.util.List; class A{ } class C> extends A>{ } 但此代码有效: import java.util.List;类 A{ } 类 C 扩展 A>{ }

标签: java list arraylist


【解决方案1】:

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

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

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

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

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

你试图创建一个命名类型参数List&lt;Value&gt;,它(在Java中)是一个无效的标识符,但是你会得到一个类似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);

【讨论】:

  • 是的,Value 是我代码中的一个对象。使用类 RowList 扩展 ArrayList> 声明,如何访问 RowList 中的值?
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
相关资源
最近更新 更多