实例化通用接口

时间:2013-01-24 22:04:28

标签: java generics anonymous-inner-class

我有一个界面

public interface Foo<T> {
    public void bar(String s, T t);
}

我想写一个方法

public void baz() {
    String hi = "Hello";
    String bye = "Bye";
    Foo<String> foo = new Foo() {
        public void bar(String s, String t) {
            System.out.println(s);
            System.out.println(s);
        }
    };
    foo.bar(hi,bye);
}

我收到错误

<anonymous Test$1> is not abstract and does not override abstract method bar(String,Object) in Foo
    Foo<String> foo = new Foo() {

我对Java很新,我确信这是一个简单的错误。我怎么写这个?

4 个答案:

答案 0 :(得分:6)

如果您使用的是java 7,类型推断并不适用于此处。您还必须在构造函数调用中提供 Type参数

    Foo<String> foo = new Foo<String>() {
        public void bar(String s, String t) {
            System.out.println(s);
            System.out.println(s);
        }
    };
    foo.bar(hi,bye); 

编辑:刚刚注意到您使用了基本上是原始类型的new Foo(),您必须为构造函数调用提供泛型类型new Foo<String>()

Related Link

答案 1 :(得分:3)

您忘记了一个<String>

public void baz() {
    String hi = "Hello";
    String bye = "Bye";
    Foo<String> foo = new Foo<String>() {
        public void bar(String s, String t) {
            System.out.println(s);
            System.out.println(s);
        }
    };
    foo.bar(hi,bye);
}

答案 2 :(得分:0)

Foo<String> foo = new Foo<String>() {
  @Override
  public void bar(String s, String t) {
    System.out.println(s);
    System.out.println(s);
  }
};

答案 3 :(得分:0)

使用以下代码进行更改,编译并运行完美。

        Foo<String> foo = new Foo<String>() {