教育网站开发价钱,交友软件开发教程,寓意前程似锦的工程公司名字,wordpress section idMethodReference 前言特定类任意方法引用函数接口特定类调用 前言
JDK1.8之后提供是Lambda#xff0c;它可以让开发者自定义函数接口中抽象方法的实现#xff0c;方法引用可以让开发者直接引用已存在的方法。 方法引用的形式: 类::静态方法 类::特定类任意方法 对象::实例方… MethodReference 前言特定类任意方法引用函数接口特定类调用 前言
JDK1.8之后提供是Lambda它可以让开发者自定义函数接口中抽象方法的实现方法引用可以让开发者直接引用已存在的方法。 方法引用的形式: 类::静态方法 类::特定类任意方法 对象::实例方法 类::new
特定类任意方法引用
本篇文章只介绍重点ContainingType::methodName,其他三种结合静态实例方法调用很容易理解。
函数接口
public interface EncodeT {void encode(T t);
}特定类
public class Base {public void encrypt() {System.out.println(Base::speak);}
}
public class Derive extends Base{Overridepublic void encrypt() {System.out.println(Derive::speak);}
}调用
按照规则静态方法中只能调用静态方法或者创建实例通过实例来调用实例方法。但是我们用Base::encrypt好像是静态方法但它实际是实例方法此时就是类::特定类任意方法。其实相当于实例调用实例方法。这个实例我们需要通过 函数接口的第一个参数传入。所以可以这么调用的函数接口第一个参数的类型必须是被调用方法所在的类。这里就是函数接口的泛型T。也可以不要泛型那么函数接口的方法第一个参数必须是Base。
public class MethodReference {public static void main(String[] args) {Derive base new Derive();EncodeBase encode Base::encrypt;//这里传入只要是Base类型/子类就会调用相应方法encode.encode(base);System.out.println(encode);}
}上面实际被调用方法encrypt()是无参的。::只是生成了方法引用encode并没有实际调用实际调用时候encode.encode(实际方法所在的类对象)这里调用的是Base的encrypt方法还是Derive的当然是Derive如果想调用Base的那么传入的Base对象 如果被调用的是有参的方法呢
Method References