方法引用符:::
方法引用符基于Lambda表达式,因为参数确定了,接口中方法只有一个, 所以这个方法体,只调用了一个方法, 那么直接就引用该方法就可以了.
引用类方法
范例:
System.out::println
// 将Lambda表达式替换成这个,这就代表引用了println方法. 因为参数已经确定, 所以方法不用写括号,且参数只有一个
引用对象实例的方法
// 假设有一个符合Lambda的接口
// 和一个将字符串变成大写字符的类PrintString
// 和静态方法userPrinter
PrintString ps = new PrintString();
userPrinter(ps::printUpper)
// 当Lambda表达式被一个对象的实例代替的时候,他的形式参数全部作为该方法的参数
引用类的实例方法
这里重点讲引用类的实例方法:可以有多个参数,第一个参数必须是被引用的对象,引用的就是它的方法。
// 接口
public interface MyString {
String mySubString(String s, int x, int y);
}
// 操作类
public class MyStringDemo {
public static void main(String[] args) {
// 在主方法中调用工具类
// 使用Lambda表达式写,
useMyString((s, x, y) -> s.substring(x, y));
// 引用类的实例方法
userMyString(String::substring);
// 对比Lambda表达式,第一个参数是方法体操作的对象,剩下两个是传给对象的方法的参数
}
// 工具类
// 在示例中参数直接定义了, 省的传入了
private static void useMyString(MyString my) {
String s = my.mySubString("HelloWorld",2,5);
System.out.println(s);
}
}
一般情况下工具类中不会给出具体参数,可以向操作类索要,使用Lambda可以传入三个参数,使用方法引用直接屏蔽了参数,还怎么传?
总结:没啥大用