java引入了未使用_Java 未绑定的方法引用

未绑定的方法引用是指没有关联对象的普通(非静态)方法。 使用未绑定的引用之前,我们必须先提供对象。

class X {

String f() { return "X::f()"; }

}

interface MakeString {

String make();

}

interface TransformX {

String transform(X x);

}

public class UnboundMethodReference {

public static void main(String[] args) {

// MakeString ms = X::f; // 无法通过编译

TransformX sp = X::f; // 可以通过编译

X x = new X();

System.out.println(sp.transform(x)); // [1]

System.out.println(x.f()); // 与[1]同等效果

}

}

注意上面代码中,如果被赋值的方法引用和需要赋值的接口方法的签名(参数和返回值)相同,那么对于未绑定的方法引用,必须提供对象实例;如果需要赋值的接口方法中的参数中有该类的对象,则认为需要一个这样的对象来调用方法,因此参数可以不完全匹配。不完全匹配的意思是被赋值方法引用除了该对象外,其余参数匹配。如下代码所示。

class This {

void two(int i, double d) {}

void three(int i, double d, String s) {}

void four(int i, double d, String s, char c) {}

}

interface TwoArgs {

void call2(This athis, int i, double d);

}

interface ThreeArgs {

void call3(This athis, int i, double d, String s);

}

interface FourArgs {

void call4(

This athis, int i, double d, String s, char c);

}

public class MultiUnbound {

public static void main(String[] args) {

TwoArgs twoargs = This::two;

ThreeArgs threeargs = This::three;

FourArgs fourargs = This::four;

This athis = new This();

twoargs.call2(athis, 11, 3.14);

threeargs.call3(athis, 11, 3.14, "Three");

fourargs.call4(athis, 11, 3.14, "Four", 'Z');

}

}

另外,如果接口中的方法有返回类型,即要求有值进行返回,那么被赋值的方法引用必须要有返回值;如果接口中的方法没有返回类型,那么对于被赋值的方法,其返回值可以有也可以没有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值