代码之家  ›  专栏  ›  技术社区  ›  Brian Deterling

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

  •  11
  • Brian Deterling  · 技术社区  · 16 年前

    编译错误->名称冲突:测试中的bar(java.util.Set)。测试中的Baz和bar(java.util.Set)。Foo具有相同的擦除,但两者都不会覆盖另一个

    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) {}
      }
    }
    
    2 回复  |  直到 16 年前
        1
  •  15
  •   Daniel Martin    16 年前

    你打算让巴兹执行吗 Foo<String> 或实施 Foo<T> 或实施 Foo ?你键入的是最后一个,但这意味着Bar实现了“非泛化”的Foo。奇怪的是,这会关闭泛型 的定义,而不仅仅是与之相关的泛型 T .

    这意味着里面 Baz ,方法 Foo.bar 取一个参数just 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) {}
    }
    

    这取决于你想做什么。

        2
  •  4
  •   jjnguy Julien Chastang    16 年前

    我认为你需要改变这一点:

    public abstract class Baz implements Foo {
    

    对此:

    public abstract class Baz implements Foo<T> {
    

    这样你就可以正确地覆盖函数 Foo .