oracle中双冒号转义,*Java 8中的(双冒号)运算符

本文详细介绍了Java中的方法引用,它是Lambda表达式的补充,允许直接引用已有方法。方法引用分为静态方法引用、对象方法引用等类型,适用于功能接口。通过方法引用,可以简化代码并提高效率,同时文章列举了多个示例来说明其使用场景和规则。
摘要由CSDN通过智能技术生成

1b70968bd00ba2cb9a89b0f039ecef76.png

月关宝盒

::称为方法引用。它基本上是对单一方法的引用。即。它通过名称引用现有的方法。简短解释:下面是对静态方法的引用示例:class Hey {

     public static double square(double num){

        return Math.pow(num, 2);

    }}Function square = Hey::square;double ans = square.apply(23d);square可以像对象引用一样传递,并在需要时触发。事实上,它可以很容易地用于引用对象的“正常”方法,就像static一张。例如:class Hey {

    public double square(double num) {

        return Math.pow(num, 2);

    }}Hey hey = new Hey();Function square = hey::square;double ans = square.apply(23d);Function上面是功能接口..充分理解::,理解功能接口也很重要。很明显,功能接口是一个只有一个抽象方法的接口。功能接口的示例包括Runnable, Callable,和ActionListener.Function上面是一个功能接口,只有一个方法:apply..它使用一个参数并产生一个结果。为什么::S是很棒的是那,那个:方法引用是与lambda表达式(.)相同的处理方式的表达式,但它们不是提供方法主体,而是按名称引用现有的方法。例如:而不是写兰达的身体Function square = (Double x) -> x * x;你可以简单的做Function square = Hey::square;在运行时,这两个square方法的行为完全相同。字节码可能是相同的,也可能不是相同的(尽管,对于上述情况,生成相同的字节码;编译上面的字节码,然后用javap -c).要满足的唯一主要标准是:您提供的方法应该与用作对象引用的函数接口的方法具有类似的签名。.以下是非法行为:Supplier p = Hey::square; // illegalsquare期望一个参数并返回double..这个get方法供货商返回一个值,但不接受参数。因此,这将导致一个错误。方法引用是指函数接口的方法。(如前所述,每个函数接口只能有一个方法)。更多的例子:accept方法消费者接受输入,但不返回任何内容。Consumer b1 = System::exit;   // void exit(int status)Consumer b2 = Arrays::sort;  

// void sort(Object[] a)Consumer b3 = MyProgram::main; // void main(String... args)class Hey {

    public double getRandom() {

        return Math.random();

    }}Callable call = hey::getRandom;Supplier call2 = hey::getRandom;DoubleSupplier sup = hey:

    :getRandom;// Supplier is functional interface that takes no argument and gives a result上面,getRandom不使用参数并返回double..因此,满足以下标准的任何功能接口:不争论就回来double可以使用。另一个例子:Set set = new HashSet<>();set.addAll(Arrays.asList("leo","bale","hanks"));Predicate pred = set:

:contains;boolean exists = pred.test("leo");在参数化类型的情况下:class Param {

    T elem;

    public T get() {

        return elem;

    }

    public void set(T elem) {

        this.elem = elem;

    }

    public static  E returnSame(E elem) {

        return elem;

    }}Supplier> obj = Param::new;Param param = obj.get();Consumer c = param:

    :set;Supplier s = param::get;Function func = Param::returnSame;方法引用可以有不同的样式,但从根本上说,它们都意味着相同的东西,可以简单地可视化为lambdas:静态方法(ClassName::methName)特定对象的实例方法(instanceRef::methName)特定对象的超级方法(super::methName)特定类型的任意对象的实例方法(ClassName::methName)类构造函数引用(ClassName::new)数组构造函数引用(TypeName[]::new)有关进一步参考,请参见http:/cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值