// 接口public interface Printer {
void printUpperCase(String s);}// 测试类public class PrinterDemo {
public static void main(String[] args) {
// lambda
// usePrinter(s-> System.out.println(s.toUpperCase())); // 引用对象的实例方法
// 方法引用符可以自动匹配参数
// 这里体现了函数式编程区别于面向对象的特点
// 按照面向对象的思想;usePrinter()应该传入Printer接口的实现类对象
// 但是这里传入的是:new PrintString()::printUpper 这里可以理解为传入了一个函数
// 而传入这个函数的目的就是为了接收方法体中传入的参数"helloWorld",进行实现函数的功能
// 这里突破了面向对象编程的限制:usePrintString()方法中并不一定要Printer接口的实现类,任何其它类的的方法引用都可以,
// 只要该方法可以接收String类型的参数,这极大增加了编码的灵活性!
usePrinter(new PrintString()::printLower);
}
static void usePrinter(Printer p){
p.printUpperCase("HelloWorld");}
}-----------------------------------------------------------------------------------------public class MyStringDemo {
public static void main(String[] args) {
// useMyString((s,x,y)->{
// return s.substring(x,y);
// });
// 简写
useMyString((s,x,y)-> s.substring(x,y));
// 这里有一点特殊的是:在引用对象的实例方法和类的静态方法时
// 只需要传入参数既可以,不需要另外的对象,而在引用类的实例方法时,
// 需要通过对象来调用。
// 故在ms.mySubString("helloworld",2, 5 )中
// 第一个参数即成为了调用substring()方法的对象,而2和5就成为了substring()的参数// useMyString(String::substring);}
public static void useMyString(MyString ms){
String s = ms.mySubString("helloworld",2, 5 );
System.out.println(s);
}
}
|
|