Почему, когда я реализую лямбда-выражение в методе main, компилятор не говорит, что интерфейсы реализованы? - PullRequest
0 голосов
/ 25 сентября 2019

Когда я реализую интерфейсы как лямбда-выражение в моем методе main, он не считается, как если бы он был реализован.

Я знаю, что могу реализовать его вне метода main, но я неПосмотрите, почему я должен использовать лямбда-выражения, если мне все равно нужно реализовать его вне основного.

public class Driver implements Interface1, Interface2, Interface3 {

    public static void main(String[] args) {

        //Implementing Interface1
        double x;
        Interface1 obj = () -> 5.5;
        x = obj.foo();
        System.out.println(x);

        //Implementing Interface2
        String str;
        Interface2 obj2 = (a) -> String.format("The number is %d", a);
        str = obj2.foo(356);
        System.out.println(str);

        //Implementing Interface3

        boolean tF;
        Interface3 obj3 = (i, s) -> i == Integer.parseInt(s);


        tF = obj3.foo(30, "30");
        System.out.print(tF);

    }

Здесь в строке 1 я получаю сообщение об ошибке, сообщающее, что интерфейсы не реализованы.Он все еще компилируется и работает, я просто не понимаю, почему я получаю это сообщение.Выход в настоящее время:

5.5
The number is 356
true

1 Ответ

1 голос
/ 25 сентября 2019

Все, что вы сделали, это задали локальные переменные в основном методе, тип которого совпадает с интерфейсами, которые класс должен реализовать.

Вы должны определить методы в классе, которые предоставляют реализации для всех интерфейсов класса.Например:

public class Driver implements Interface1, Interface2, Interface3 {
    public static void main(String[] args) {
        // all code in here is irrelevant to the class implementing Interface1, Interface2, Interface3
    }

    public void interface1Method() {
        // whatever
    }

    public void interface2Method() {
        // whatever
    }

    public void interface3Method() {
        // whatever
    }
}

Обратите внимание, что вы не можете использовать лямбды для этого;Driver должен фактически объявить реализации для отсутствующих методов из всех интерфейсов, которые он объявляет, что он реализует.

...