实例化通用接口

cdk*_*cdk 2 java generics anonymous-inner-class

我有一个界面

public interface Foo<T> {
    public void bar(String s, T t);
}
Run Code Online (Sandbox Code Playgroud)

我想写一个方法

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);
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

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

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

Per*_*ror 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); 
Run Code Online (Sandbox Code Playgroud)

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

相关链接