2012-03-08 19 views
1

我试图实现Java 1.6队列接口,但我得到的错误:无法实现队列 - 不重写抽象方法的报价(java.lang.Object中)

MyBoundedQueue.java:27:MyBoundedQueue不是抽象的,在java.util.Queue中不重写抽象方法的报价(java.lang.Object中)

我真不明白的是,有队列中没有报价(对象)方法类。 Java 1.6 API for Queue说有一种方法布尔报价(E e),其中E是一个参数化的类型,实际上,我已经实现了,如下所示。

任何帮助?

import java.util.ArrayDeque; 
import java.util.Iterator; 
import java.util.Queue; 

public class MyBoundedQueue<ItemType> implements Queue 
{ 
    private int _maxSize; 
    private ArrayDeque<ItemType> _window; 

    public MyBoundedQueue(int maxSize) 
    { 
     _maxSize = maxSize; 
     _window = new ArrayDeque<ItemType>(_maxSize); 
    } 

    public boolean add(ItemType item) 
    { 
     if (_window.size() >= _maxSize) 
     { 
      _window.removeFirst(); 
     } 

     _window.addLast(item); 
    } 

    public ItemType element() 
    { 
     return _window.element(); 
    } 

    public boolean offer(ItemType item) 
    { 
     add(item); 
     return true; 
    } 

    public ItemType peek() 
    { 
     return _window.peek(); 
    } 

    public ItemType poll() 
    { 
     return _window.poll(); 
    } 

    public ItemType remove() 
    { 
     return _window.remove(); 
    } 

    public void clear() 
    { 
     _window.clear(); 
    } 

    public int size() 
    { 
     return _window.size(); 
    } 

    public Iterator<ItemType> iterator() 
    { 
     return _window.iterator(); 
    } 


} 
+0

约定是将参数类型保持为单个大写字母,以便它们可以轻松地与实际的类类型区分开来。 – Dunes 2012-03-08 21:19:49

回答

2

您需要将其更改为:

public class MyBoundedQueue implements Queue<ItemType> 

它告诉你offer(Object)因为没有通用打字,这就是它会是。你也不需要为你的类指定一个泛型类型......你不会在任何地方使用泛型类型。

如果你想你的类使用泛型你想做的事:

public class MyBoundedQueue<T> implements Queue<T> { 
... 

到处都目前有ItemType你会使用T代替。

+0

谢谢。这个班确实使用了泛型。我来自C++ STL,它可能会或可能不会使用单个大写字符作为类型的约定。 :P – stackoverflowuser2010 2012-03-08 21:30:20

+0

@ stackoverflowuser2010 - 当我使用Java时,必须将C++交换出去。在你坐着盯着屏幕上的一些叫嚷“为什么不编译”的东西后,这两个人已经足够让你毁了你的一天:-D – 2012-03-08 22:44:45

2
  1. 请坚持编码规范,并使用一个单一的,大写字母类型参数!
  2. 您需要实现Queue<T>(或Queue<ItemType>如果你坚持)
+0

你今天在编码规范中教会了我一个明智的教训,dty:D – stackoverflowuser2010 2012-03-08 22:55:42

2

更改为

MyBoundedQueue implements Queue<ItemType>

您的代码就相当于

MyBoundedQueue implements Queue<Object>

2

ItemType固定类,或者它应该是一个参数?

如果它是固定的,它应该是class MyBoundedDeque implements Queue<ItemType>,而不是相反。

否则,应该是class MyBoundedQueue<ItemType> implements Queue<ItemType>

+0

@OP:这正是我们编码惯例的原因 - 没有人知道你是否“重新使用'ItemType'作为类型参数,或者如果它是一个你正在绑定的类作为参数提供给Queue的类型参数。 – dty 2012-03-08 21:36:57

相关问题