Implementing an interface with two abstract methods by a lambda expression

前端 未结 4 2068
Happy的楠姐
Happy的楠姐 2020-12-28 13:39

In Java 8 the lambda expression is introduced to help with the reduction of boilerplate code. If the interface has only one method it works fine. I

4条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-28 14:36

    Lambda expressions are only usable with functional interface as said by Eran but if you really need multiple methods within the interfaces, you may change the modifiers to default or static and override them within the classes that implement them if necessary.

    public class Test {
        public static void main(String[] args) {
            I1 i1 = () -> System.out.println(); // NOT LEGAL
            I2 i2 = () -> System.out.println(); // TOTALLY LEGAL
            I3 i3 = () -> System.out.println(); // TOTALLY LEGAL
        }
    }
    
    interface I1 {
        void show1();
        void show2();
    }
    
    interface I2 {
        void show1();
        default void show2() {}
    }
    
    interface I3 {
        void show1();
        static void show2 () {}
    }
    

    Inheritance

    You shouldn't forget the inherited methods.

    Here, I2 inherits show1 and show2 and thus can not be a functional interface.

    public class Test {
        public static void main(String[] args) {
            I1 i1 = () -> System.out.println(); // NOT LEGAL BUT WE SAW IT EARLIER
            I2 i2 = () -> System.out.println(); // NOT LEGAL
        }
    }
    
    interface I1 {
        void show1();
        void show2();
    }
    
    interface I2 extends I1 {
        void show3();
    }
    

    Annotation

    To make sure your interface is a functional interface, you may add the following annotation @FunctionalInterface

    @FunctionalInterface <------- COMPILATION ERROR : Invalid '@FunctionalInterface' annotation; I1 is not a functional interface
    interface I1 {
        void show1();
        void show2();
    }
    
    @FunctionalInterface
    interface I2 {
        void show3();
    }
    

提交回复
热议问题