1

我需要使用接口实现一个包数据结构java.util.Collection。我不是就数据结构的实际实现寻求帮助。我只是无法编译我的程序。我只想在开始实际实现方法之前编译接口的空白实现(带有方法的非功能签名)。

class Bag<T> implements java.util.Collection<T> 
  {

  public void Collection () {

  }

  public boolean add(E e) {

  }

  public boolean addAll (Collection<? extends E> c) {

  }

  public void clear() {

  }

  public boolean contains(Object o) {

  }

  public boolean containsAll(Collection<?> c) {

  }

  public boolean equals(Object o) {

  }

  public int hashCode() {

  }

  public boolean isEmpty() {

  }

  public Interator<E> interator() {

  }

  public boolean remove(Object o) {

  }

  public boolean removeAll(Collection<?> c) {

  }

  public int size() {

  }

  public Object[] toArray() {

  }

  public <T> T[] toArray(T[] a) {

  }
}

编译器在方法的参数中找不到类 E,如add. 我应该为 定义一个类E,还是我不了解 E 实际上是什么?编译器说它找不到类 Collection(在方法的参数中addAll)我是导入java.util.Collection还是我应该知道的其他内容?编译器也不知道class Iterator,我也不知道。

我知道这可能都是初级的,但我昨天通过谷歌等找不到任何东西,我教授的讲座根本不遵循这些项目。我迷路了。谢谢你的帮助!

编辑:另外,我没有对此进行过多搜索,但如果有人能告诉我任何关于“?”的有用信息,例如public boolean addAll (Collection<? extends E> c) {},那将不胜感激。

4

6 回答 6

2

使用TE作为类型参数,然后在整个类定义中始终如一地使用它。

Java 文档使用E,因此您可以例如将第一行更改为:

class Bag<E> implements java.util.Collection<E> 

对于那些不返回 void 的方法,您还需要返回值或抛出异常。

public int size() {
    throw UnsupportedOperationException();
}
于 2011-11-04T21:12:22.983 回答
0

E 应该是 T,这是您要存储的泛型类型。您的构造函数应该用于您的类而不是接口。此外,您需要在具有返回值的方法中添加至少存根返回,例如,如果返回是布尔值,则“返回 false”。

希望这可以帮助。

于 2011-11-04T21:12:25.477 回答
0

尝试将导入语句更改为import java.util.*;

于 2011-11-04T21:12:43.180 回答
0

因为您没有E声明,所以请T改用,而且您还需要在声明返回的地方返回。

于 2011-11-04T21:13:12.100 回答
0

您的通用参数被调用T,并且您正在E方法的实现中使用。如果您使用T元素类型,请更新方法签名。

如果没有虚拟实现,例如return null;return false;在非 void 方法中,它可能仍然无法编译。

java.util.Iterator是一个接口,它描述了一组方法,这些方法允许您迭代集合中的元素。您将返回实现该接口及其方法的类的实例。YourListIterator可能会保留对列表中您所在位置的引用或索引,返回相应的元素并在列表中前进。

本教程?讨论了泛型(包括 的使用) 。

于 2011-11-04T21:13:49.620 回答
0

在用 JAVA 实现接口之前,您必须进行大量基础学习。可能会读到“thinking in java”之类的东西在你的程序中有多个问题

  1. 缺少 Collection 类的导入
  2. 任何方法中都没有返回语句
  3. 用 T 替换 E
于 2011-11-04T21:14:05.423 回答