我已经阅读了与擦除相关的其他问题,但我仍然不清楚为什么我在下面的课程中遇到编译错误.其他问题涉及实际使用泛型类型的方法,而我只是尝试使用完全相同的签名来实现方法.谁能解释一下?
编译错误 - >名称冲突: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) {}
}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*tin 15
您是否打算让Baz实施Foo<String>或实施Foo<T>或实施Foo?你输入的是最后一个,但这意味着Bar实现了"ungenerified"Foo.奇怪的是,这Foo完全取消了定义中的泛型,而不仅仅是与那些有关的泛型T.
这意味着在内部Baz,该方法Foo.bar采用just的参数Set,而不是Set<String>.
你想要:
public abstract class Baz implements Foo {
public void bar(Set s) {}
}
Run Code Online (Sandbox Code Playgroud)
要么
public abstract class Baz<T> implements Foo<T> {
public void bar(Set<String> s) {}
}
Run Code Online (Sandbox Code Playgroud)
要么
public abstract class Baz implements Foo<Void> {
public void bar(Set<String> s) {}
}
Run Code Online (Sandbox Code Playgroud)
取决于你想要做什么.