我正在修改 Java 中日志的相当基本的链表实现以使用泛型。我的项目有 3 个 .java 文件:
- GenericLogInterface.java -> 定义日志的接口(interface)
- LLGenericNode.java -> 定义 LL 节点的类
- LinkedGenericLog.java -> 定义 LL 的接口(interface)扩展
不幸的是,我收到来自 LinkedGenericLog.java 的编译时错误:
ch02/genericStringLogs/LinkedGenericLog.java:10: ch02.genericStringLogs.LinkedGenericLog is not abstract and does not override abstract method contains(java.lang.Object) in ch02.genericStringLogs.GenericLogInterface
通过重写 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”并使用命令行进行编译)
最佳答案
在java中,方法签名包括参数及其类型。所以我不得不说 LinkedGenericLog
中的 T
类型与 GenericLogInterface
public class LinkedGenericLog<T> implements GenericLogInterface
该行并不表示 T 相同,您应该将其替换为:
public class LinkedGenericLog<T> implements GenericLogInterface<T>
关于Java编译时错误: Compiler not recognizing method override,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122613/