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>() {
于 2013-01-24T22:11:21.593 に答える
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 に答える