2013-01-24 2 views
2

인스턴스화 내가 가진 인터페이스: 일반적인 인터페이스

내가

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

내가 자바 비교적 새로운 해요 오류를 얻을 방법을 쓰고 싶어

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

, 나는 이것이 단순한 실수라고 확신한다. 내가 어떻게 쓸 수 있니?

답변

6

자바 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()를 사용한 것으로 나타났습니다, 당신은 당신의 생성자 invokation의 제네릭 형식을 제공해야 new Foo<String>()

Related Link

+1

OP가'<> '연산자를 사용하지 않았다는 것을 제외하면 - 그는 원시'Foo'를 사용하고있었습니다. –

+0

'new Foo'는 Java 7의'new Foo <>'와 같은가요? 나는 그 사실을 몰랐다. –

+0

아니, 내가 말한 적이 없다, 그들은 같은,'new Foo <>'(anonynymous 클래스 아니지만) 형식 유추의 도입으로 인해 자바 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

아래 코드로 변경하면 완벽하게 컴파일되고 실행됩니다.

관련 문제