java变量没分配_java – 在不实现接口的情况下将对象分配给接口变量

我刚刚学习了java 8的方法引用概念.我发现奇怪的是在没有实现接口的情况下将方法引用分配给接口变量的示例,并且调用接口的抽象方法是调用引用的方法.

interface Sayable {

void say();

}

public class InstanceMethodReference {

public void saySomething() {

System.out.println("Hello, this is non-static method.");

}

public static void main(String[] args) {

InstanceMethodReference methodReference = new InstanceMethodReference();

Sayable sayable = methodReference::saySomething;

sayable.say();

}

}

上面的代码打印了saySomething方法的消息,我试图理解如何在这里完成方法和对象的内存分配以及它的整体工作方式.

任何帮助赞赏.

解决方法:

这只是匿名实现的语法糖或带闭包的lambda(指定义之外的状态,在您的情况下是methodReference的实例).方法参考和lambdas在这方面同等对待.所以真的是相同的内存分配.

当接口只有一个非静态方法并且该方法的签名与lambda或方法引用的签名匹配时,可以使用方法引用(或lambdas).在这种情况下,编译器将知道如何包装它,因此它将是可分配的.如果它是“标准”接口之一,如功能,消费者或供应商或自定义接口,则无关紧要,它应该是一个功能界面.

Arrays.sort(rosterAsArray, Person::compareByAge);

方法引用Person :: compareByAge在语义上与lambda表达式(a,b)相同 – > Person.compareByAge(a,b).每个都有以下特点:

>其形式参数列表是从Comparator.compare复制的,即(Person,Person).

>它的主体调用方法Person.compareByAge.

标签:java,object,interface,functional-programming

来源: https://codeday.me/bug/20190527/1162156.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值