方法和构造器的引用
前面说到Lambda表达式可以被当作对象进行赋值,那么我们同样可以通过Lambda表达式来引用方法或者构造器来直接对对象进行操作。
方法的引用
public class Convert {
public static void main(String[] args){
//创建一个ConvertString 接口的对象并对其进行操作
ConvertString CS = msg -> Integer.valueOf(msg);//引用类方法对封装的msg字符串转换成Integer
//引用通过Lambda表达式修改的convt()方法
Integer num = CS.convt("123");//讲"123"转换成123封装起来
}
}
interface ConvertString{
Integer convt(String msg);
}
我们也可以直接通过方法引用来实现以上代码
public class Convert {
public static void main(String[] args){
//接口ConvertString中的被实现的方法的所有参数被传入Integer中的valueOf方法
ConvertString CS = Integer::valueOf;//引用方法
System.out.println(CS.convt("123"));
}
}
interface ConvertString{
Integer convt(String msg);
}
通过接口来描述一个对象的行为,一般我们通过新建一个类来重写接口中的抽象方法来进行调用接口中的抽象方法。现在我们通过Lambda表达式可以直接通过接口创建对象,并且重写行为。通过方法的引用来使Lambda表达式单独代码更简洁
构造器的引用
根据之前学的Lambda表达式的匿名实现类
我们传入数据的时候通过一个类中的方法传入接口对象来进行对象的赋值
public class Convert {
public static void main(String[] args){
format fm = new format();
fm.input(msg -> System.out.println(msg) );
}
}
interface ConvertString{
void convt(String msg);
}
class format{
public void input(ConvertString cv){
cv.convt("对msg进行赋值");
}
}
这钟传入数据的方法显然不够简洁,在普通的类中我们通过构造器传入数据,在Lambda表达式中,我们同样可以通过引用构造器来传入数据
public class Convert {
public static void main(String[] args){
inputtest inputts = Conustructor::new;
Conustructor Cs = inputts.test("我要学java");
System.out.println(Cs.getNum());
}
}
@FunctionalInterface
public class Convert {
public static void main(String[] args){
inputtest inputts = Conustructor::new;//实例化接口的对象,并且让接口执行调用Conunstructor构造器这一动作
Conustructor Cs = inputts.test("我要学java");//这里的test已经被改成Lambda表达式-》引用构造器(个人理解:形式方法
System.out.println(Cs.getNum());//返回输入构造器中的数据
}
}
@FunctionalInterface
interface inputtest{
//定义一个对象的方法,同时包含对象名和方法名
Conustructor test(String name);
}
class Conustructor{
public String num;
Conustructor(String num){
this.num = num;
}
public String getNum() {
return num;
}
}