第一次实现java接口,无法成功编译

时间:2011-11-04 21:07:49

标签: java interface implements bag

我需要使用接口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) {

  }
}

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

我知道这可能是基本的,但我昨天在谷歌等地找不到任何东西,而我教授的讲座根本没有关注这些项目。我迷失在这一个。谢谢你的帮助!

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

6 个答案:

答案 0 :(得分:2)

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

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

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

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

public int size() {
    throw UnsupportedOperationException();
}

答案 1 :(得分:0)

E应为T,这是您要存储的通用类型。你的构造函数应该是你的类而不是接口。此外,您还需要在方法中添加至少带有返回值的存根返回,例如: &#34;返回false&#34;如果返回是布尔值。

希望这有帮助。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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

tutorial中讨论了泛型(包括使用?)。

答案 5 :(得分:0)

在JAVA中实现接口之前,您将需要做很多基础学习。可以阅读&#34;思考java&#34;或者其他的东西 在你的程序中有多个问题

  1. 缺少Collection类的导入
  2. 任何方法中都没有返回语句
  3. 用T
  4. 替换E.