Java 中SAM的Lambda表达式的条件测试

作为新奇玩意儿的Lambda表达式,如果只是使用Java中自带的SAM Interfcace来玩,难免就太没意思了,所以本文将逐渐讨论如何在以后的编码活动中使用自定义的SAM Interface。

/**
 * Created by simon on 2016/4/6.
 */
public class SAMTest {
    public static void main(String[] args) {
        SAMTest test = new SAMTest();

        test.oneMethodTest(i -> i);
//        test.twoMethodTest(i -> i); 错误,无法通过编译
//        test.twoMethodTest((i, i) -> i + i); 错误,无法通过编译
        test.defaultMethodTest(i -> i);
        test.defaultMethodTest(new OneMethodWithDefaultInterface() {
            @Override
            public int test4(int i) {
                return defaultMethod(i);
            }
        }); // 在重写了接口方法的情况下不能够使用Lambda
    }
}
    /**
     *
     * @param oneMethodInterface
     */
    public void oneMethodTest(OneMethodInterface oneMethodInterface) {
        oneMethodInterface.toString();
    }

    /**
     * SAM
     */
    @FunctionalInterface
    public interface OneMethodInterface {
        int test3(int i);
    }
    /**
     * 用来测试有两个方法的Interface
     *
     * @param twoMethodInterface
     */
    public void twoMethodTest(TwoMethodInterface twoMethodInterface) {
        twoMethodInterface.toString();
    }
    /**
     * 两个方法的接口
     */
    public interface TwoMethodInterface {
        int test1(int i, int p);

        int test2(int i);
    }
    public void defaultMethodTest(OneMethodWithDefaultInterface defaultInterface) {
        defaultInterface.defaultMethod(1);
    }

    /**
     * 一个方法加一个默认方法的接口
     */
    public interface OneMethodWithDefaultInterface {
        int test4(int i);

        default int defaultMethod(int i) {
            System.out.println(i * i);
            return i * i;
        }
    }

可以看到,在一个拥有两个方法(不含默认方法)的接口中,是不可以使用Lambda表达式的,当一个接口中只有一个抽象方法,即达成了SAM(Single Abstract Method)条件时,Lambda表达式才可以使用,即使它有至少一个的默认方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值