Создание универсального интерфейса

у меня есть интерфейс

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, я уверен, что это простая ошибка. как я могу это написать?


person cdk    schedule 24.01.2013    source источник


Ответы (3)


Если вы используете 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); 

EDIT: только что заметил, что вы использовали new Foo(), который в основном является необработанным типом, вы должны предоставить общий тип для вызова вашего конструктора, new Foo<String>()

Связанная ссылка

person PermGenError    schedule 24.01.2013
comment
За исключением того, что ОП не использовал оператор <> - он использовал необработанный Foo. - person Paul Bellora; 25.01.2013
comment
Вы говорите, что new Foo совпадает с new Foo<> в Java 7? Я не знал об этом. - person Paul Bellora; 25.01.2013
comment
Нет, я никогда этого не говорил, они разные, new Foo<> (хотя и не для анонимных классов) будет работать только в Java 7 из-за введения вывода типов. - person PermGenError; 25.01.2013
comment
@PaulBellora, извините, мое объяснение было расплывчатым, отредактировал его сейчас .. :) - person PermGenError; 25.01.2013

Вы забыли один <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);
}
person Stephen Connolly    schedule 24.01.2013

Измените приведенный ниже код, он отлично скомпилируется и запустится.

        Foo<String> foo = new Foo<String>() {
person Ghanshyam Gupta    schedule 24.01.2013