概念
类名称::static 方法名称;
interface IFunction{
public String convert(T value);
}
public class A110401方法引用1静态方法引用 {
public static void main(String[] args) {
IFunction function = String::valueOf; //此时的接口的函数式实现为其他方法引用
String str = function.convert(987); //将整型转化为String
System.out.println(str.length());
}
}
运行结果:
3
通过此时的代码就可以非常清晰的描述出当前整个处理结果的关系:对于函数式的接口不再用户自己编写具体的内容,而是直接通过已有的方法引用的形式来实现具体的 函数实现。
引用某个类的普通方法interface IFunction2{
String upper();
}
public class A110401方法引用2引用类方法 {
public static void main(String[] args) {
IFunction2 function = "一天进步一点点,good good study day day up"::toUpperCase; //此时的接口的函数式实现为其他方法引用
String str = function.upper(); //将整型转化为String
System.out.println(str);
}
}
运行结果:
一天进步一点点,GOOD GOOD STUDY DAY DAY UP
由于在本程序中所有要进行参与计算的数据已经通过了具体的字符串对象有所定义“一天进步一点点,good good study day day up”,所以在定义函数式接口的时候upper()方法就不再需要传递具体的参数内容了。 以上的操作相当于通过具体的对象实现了指定的方法引用,但是问题是在一引起情况下,可能要参与运算的数据并不一定是固定的。
引用特定类的普通方法字符串大小比较的方法引用:public init compareTo(String str);
@FunctionalInterface
interface IFunction3{
int compare(P p1,P p2);
}
public class A110401方法引用3引用特定方法 {
public static void main(String[] args) {
IFunction3 function = String :: compareTo; //正常调用:字符串对象.compareTo(字符串);
System.out.println(function.compare("itkey.fun","ITKEY.fun"));
}
}
运行结果:
32
此时需要参与比较运算的两个数据必须通过compare()方法动态的进行设置,因为在引用 compareTo()普通方法的时候并没有为其指定具体的实例化对象内容。