2013-01-24 95 views
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,我相信這是一個簡單的錯誤。我怎麼寫這個?

回答

6

如果您使用的是java 7,類型推理不適用於此處。您必須在調用構造函數中提供類型參數。

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()這基本上是一個原始類型,你必須爲你的構造invokation提供通用型,new Foo<String>()

Related Link

+1

除OP沒有使用'<>'操作符 - 他使用原始'Foo'。 –

+0

你是說在Java 7中'new Foo'和'new Foo <>'是一樣的嗎?我沒有意識到這一點。 –

+0

nopes,我從來沒有說過,他們不是一樣的,'新的Foo <>'(不適用於不同類的)不適用於java 7,因爲引入了類型推斷。 – PermGenError

0
Foo<String> foo = new Foo<String>() { 
    @Override 
    public void bar(String s, String t) { 
    System.out.println(s); 
    System.out.println(s); 
    } 
}; 
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); 
} 
0

更改下面的代碼它編譯和運行完美。

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