4

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

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

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

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

我正在尝试实现 aList以在 a 中使用database,并且想要扩展ArrayList以便我能够检查.add(),.set()etc. 方法是否不违反 the 的要求Database(不添加具有相同键的两行等)。我意识到这可能不是实现 a 的最佳方式database,但这是大学的一项任务,要求我们这样做。

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

4

1 回答 1

6

以下两行是相同的(对于编译器),即使您有一个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>,它(在 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该类是数据的条目行。相反,如果它是单个数据项,并且行由 a 表示,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);
于 2013-05-24T04:25:46.947 回答