java为什么使用变量_java – 为什么方法引用使用非最终变量?

方法引用不是lambda表达式,尽管它们可以以相同的方式使用。我认为这是造成混乱的原因。下面是一个简化的Java如何工作,它不是如何真正的工作,但它是足够接近。

假设我们有一个lambda表达式:

Runnable f = () -> one.bar();

这相当于实现Runnable的一个匿名类:

Runnable f = new Runnable() {

public void run() {

one.bar();

}

}

这里同样的规则适用于匿名类(或方法本地类)。这意味着,人们需要有效地决定它工作。

另一方面方法句柄:

Runnable f = one::bar;

更喜欢:

Runnable f = new MethodHandle(one, one.getClass().getMethod("bar"));

使用MethodHandle:

public class MethodHandle implements Runnable {

private final Object object;

private final Method method;

public MethodHandle(Object object, java.lang.reflect.Method method) {

this.object = Object;

this.method = method;

}

@Override

public void run() {

method.invoke(object);

}

}

在这种情况下,分配给一个对象的对象将作为创建的方法句柄的一部分进行分配,因此一个对象本身不需要有效地最终实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值