:: 该符号为引用运算符,而它所在的表达式被称为方法引用
interface Print {
void printString(String s);
}
public class Demo {
private static void startPrint(Print p){
p.printString("Hello World");
}
public static void main(String[] args) {
// Lambda简化写法
startPrint(s -> System.out.println(s));
// 方法引用
startPrint(System.out::println);
}
}不必重复逻辑,简化某些存在相同方案的地方需要重复相同逻辑的情况。
类名::静态方法
Integer::parseInt
public static int parseInt(String s) 将此String转换为int类型数据interface Run{
int run(String x);
}
public class Demo {
public static void main(String[] args) {
//Lambda写法
startRun(r -> Integer.parseInt(r));
//引用类方法
startRun(Integer::parseInt);
}
private static void startRun(Run r) {
int t_run = r.run("1000m");
System.out.println(t_run);
}
}对象::成员方法"HelloWorld"::toUpperCase public String toUpperCase() 将此String所有字符转换为大写class PrintString {
// 把字符串参数变成大写的数据,然后在控制台输出
public void printUpper(String s){
String result = s.toUpperCase();
System.out.println(result);
}
}
interface Print {
void printUpperCase(String s);
}
public class Demo{
public static void main(String[] args) {
// Lambda 简化写法
startPrinter(s -> System.out.println(s.toUpperCase()));
// 引用对象的实例方法
PrintString ps = new PrintString();
startPrinter(ps::printUpper);
}
private static void startPrinter(Print p){
p.printUpperCase("Hello World");
}
}类名::成员方法String::substring
public String substring(int beginIndex,int endIndex) 从beginIndex开始到endIndex结束,截取字符串。返回一个子串,子串的长度为endIndex-beginIndexinterface MyString {
String mySubString(String s, int x, int y);
}
public class Demo {
public static void main(String[] args) {
// Lambda 简化写法
startSubString((s,x,y) -> s.substring(x,y));
// 引用类的实例方法
startSubString(String::substring);
}
private static void startSubString(MyString ms) {
String s = ms.mySubString("Hello World",2,5);
System.out.println(s);
}
}类名::newStudent::newclass Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
interface StudentBuilder {
Student build(String name,int age);
}
public class Demo {
public static void main(String[] args) {
//Lambda简化写法
useStudentBuilder((name, age) -> new Student(name, age));
//引用构造器
useStudentBuilder(Student::new);
}
private static void useStudentBuilder(StudentBuilder sb) {
Student s = sb.build("小明", 18);
System.out.println(s.getName() + "," + s.getAge());
}
}