2

我有一个界面

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

4 回答 4

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>()

相关链接

于 2013-01-24T22:07:22.813 回答
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);
}
于 2013-01-24T22:08:13.260 回答
0
Foo<String> foo = new Foo<String>() {
  @Override
  public void bar(String s, String t) {
    System.out.println(s);
    System.out.println(s);
  }
};
于 2013-01-24T22:07:55.787 回答
0

使用以下代码进行更改,它可以完美地编译和运行。

        Foo<String> foo = new Foo<String>() {
于 2013-01-24T22:11:21.593 回答