package com.yy;
/**
- 方法引用 把方法体拿来使用 方法引用也是lambda表达式的体现
- 构造方法引用
- 普通方法
- 静态方法
- @author WHD
*/
public class Test1 {
public static void main(String[] args) {
// :: 表示方法引用
// 构造方法引用
//对象名::方法名
//类名::new 调用无参构造方法
//接口只有一个方法时
//引用的方法内容自动重写覆盖
Info info = Book :: new;
//调用重写后的方法
info.print();
//getClass()返回其class类型,输出其字符串名字
System.out.println(info.getClass().getName());
//自动重写Info接口方法,()空参,函数体System.out.println("这是一本书");
Info info1 = ()-> System.out.println("这是一本书");
//输出重写后的方法
info1.print();
//valueOf把形参转为字符串
String flag = String.valueOf(false);
//输出字符串长度length
System.out.println(flag.length());
// 静态方法引用
//Message接口只有一个方法,String 类的valueOf方法自动重写覆盖该方法
Message<String,Boolean> ms = String :: valueOf;
//泛型对像ms调用重写后的getStr方法,将形参true转变为字符串,输出其length长度4
System.out.println(ms.getStr(true).length());
// 普通方法引用
//创建字符串
String str = "abcd**";
//是否以字符"a"开头
System.out.println(str.startsWith("a"));
//字符串的 startsWith方法重写TestStartsWith接口里的方法
TestStartsWith<Boolean,String> ts = str :: startsWith;
//输出重写的方法并传参"*" ,false
System.out.println(ts.test("*"));
System.out.println("====================");
// System.out里的println()方法重写PrintHello接口里的唯一方法
PrintHello ph = System.out :: println;
//调用重写后的方法并传参"hello world"
ph.print("hello world");
}
}
@FunctionalInterface
interface PrintHello{
void print(String str);
}
@FunctionalInterface
interface TestStartsWith<R,P>{
R test(P p);
}
/**
- 这个接口只有一个抽象方法 用于引用静态方法
- @author WHD
- return表示返回值类型
-
parameter表示参数类型
*/
@FunctionalInterface
interface Message<R,P>{
R getStr(P p);
}
@FunctionalInterface
interface Info{
void print();
}
class Book{
public Book() {
System.out.println("这是一本书《金瓶梅图文版》");
}
}