Java擦除错误与方法中不相关的泛型

Bri*_*ing 11 java generics

我已经阅读了与擦除相关的其他问题,但我仍然不清楚为什么我在下面的课程中遇到编译错误.其他问题涉及实际使用泛型类型的方法,而我只是尝试使用完全相同的签名来实现方法.谁能解释一下?

编译错误 - >名称冲突: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)

取决于你想要做什么.