我正在修改一个相当基本的 Java 日志链表实现以使用泛型。我的项目有 3 个 .java 文件:
- GenericLogInterface.java -> 定义日志的接口
- LLGenericNode.java -> 定义 LL 节点的类
- LinkedGenericLog.java -> 定义 LL 的接口扩展
不幸的是,我收到了来自 LinkedGenericLog.java 的编译时错误:
ch02/genericStringLogs/LinkedGenericLog.java:10:ch02.genericStringLogs.LinkedGenericLog 不是抽象的,不会覆盖 ch02.genericStringLogs.GenericLogInterface 中的抽象方法 contains(java.lang.Object)
通过在 LinkedGenericLog.java 中覆盖 GenericLogInterface.java 中的 contains() 方法,这似乎很容易解决。
然而,有一个巨大的障碍:我已经覆盖了它。
以下是三个 .java 文件的来源:
GenericLogInterface.java
package ch02.genericStringLogs;
public interface GenericLogInterface<T>
{
void insert(T element);
// Precondition: This GenericLog is not full.
//
// Places element into this GenericLog.
boolean isFull();
// Returns true if this GenericLog is full, otherwise returns false.
int size();
// Returns the number of Strings in this GenericLog.
boolean contains(T element);
// Returns true if element is in this GenericLog,
// otherwise returns false.
// Ignores case differences when doing string comparison.
void clear();
// Makes this GenericLog empty.
String getName();
// Returns the name of this GenericLog.
String toString();
// Returns a nicely formatted string representing this GenericLog.
}
LLGenericNode.java
package ch02.genericStringLogs;
public class LLGenericNode<T>
{
private T info;
private LLGenericNode link;
public LLGenericNode(T info)
{
this.info = info;
link = null;
}
public void setInfo(T info)
// Sets info of this LLGenericNode.
{
this.info = info;
}
public T getInfo()
// Returns info of this LLGenericNode.
{
return info;
}
public void setLink(LLGenericNode link)
// Sets link of this LLGenericNode.
{
this.link = link;
}
public LLGenericNode getLink()
// Returns link of this LLGenericNode.
{
return link;
}
}
LinkedGenericLog.java
package ch02.genericStringLogs;
public class LinkedGenericLog<T> implements GenericLogInterface
{
protected LLGenericNode log; // reference to first node of linked
// list that holds the GenericLog items
protected String name; // name of this GenericLog
public LinkedGenericLog(String name)
// Instantiates and returns a reference to an empty GenericLog object
// with name "name".
{
log = null;
this.name = name;
}
public void insert(T element)
// Precondition: This GenericLog is not full.
//
// Places element into this GenericLog.
{
LLGenericNode newNode = new LLGenericNode(element);
newNode.setLink(log);
log = newNode;
}
public boolean isFull()
// Returns true if this GenericLog is full, false otherwise.
{
return false;
}
public int size()
// Returns the number of items in this GenericLog.
{
int count = 0;
LLGenericNode node;
node = log;
while (node != null)
{
count++;
node = node.getLink();
}
return count;
}
public boolean contains(T element)
// Returns true if element is in this GenericLog,
// otherwise returns false.
// Ignores case difference when doing comparison.
{
LLGenericNode node;
node = log;
while (node != null)
{
if (element.equals(node.getInfo())) // if they match
return true;
else
node = node.getLink();
}
return false;
}
public void clear()
// Makes this GenericLog empty.
{
log = null;
}
public String getName()
// Returns the name of this GenericLog.
{
return name;
}
public String toString()
// Returns a nicely formatted string representing this GenericLog.
{
String logString = "Log: " + name + "\n\n";
LLGenericNode node;
node = log;
int count = 0;
while (node != null)
{
count++;
logString = logString + count + ". " + node.getInfo() + "\n";
node = node.getLink();
}
return logString;
}
}
你可以清楚地看到,我已经在 LinkedGenericLog.java 中覆盖了 contains() 然而,编译器仍然会抛出这个错误。我认为这与我在 contains() 方法的参数中使用泛型有关,但我是泛型新手,无法理解这个问题。
谁能帮我?
(顺便说一句,我正在运行 java 版本“1.6.0_15”并使用命令行编译)