我已经阅读了与删除相关的其他问题,但我仍然不清楚为什么我在下面的课程中遇到编译错误。其他问题涉及实际使用泛型类型的方法,而我只是尝试使用完全相同的签名来实现方法。谁能解释一下?
编译错误 - >名称冲突:test.Baz中的bar(java.util.Set)和test.Foo中的bar(java.util.Set)具有相同的擦除,但都没有覆盖其他
import java.util.Set;
public class test {
public interface Foo<T> {
public void bar(Set<String> s);
}
public abstract class Baz implements Foo {
public void bar(Set<String> s) {}
}
}
答案 0 :(得分:15)
您是否打算让Baz实施Foo<String>
或实施Foo<T>
或实施Foo
?你输入的是最后一个,但这意味着Bar实现了“ungenerified”Foo。奇怪的是,这完全取消了Foo
定义中的泛型,而不仅仅是与T
有关的泛型。
这意味着在Baz
内,方法Foo.bar
的参数仅为Set
,而不是Set<String>
。
你想要:
public abstract class Baz implements Foo {
public void bar(Set s) {}
}
或
public abstract class Baz<T> implements Foo<T> {
public void bar(Set<String> s) {}
}
或
public abstract class Baz implements Foo<Void> {
public void bar(Set<String> s) {}
}
取决于你想要做什么。
答案 1 :(得分:4)
我认为你需要改变这个:
public abstract class Baz implements Foo {
到此:
public abstract class Baz implements Foo<T> {
这样你就可以正确覆盖函数Foo
。