( 東西應該是有用的就是看用哪裏,怎麼樣了!高手在民間!)
方法引用:是指通過方法的名字來指向一個方法。方法引用可以使語言的構造更緊湊簡潔,減少冗餘代碼;
方法引用的方式是使用一對冒號 :: 。方法引用結合Lambda 更愜意。
方法引用分爲:構造器方法引用;靜態方法方法引用;特定類的方法引用;特定實例方法引用。
1、構造器方法引用:
語法是Class::new,或者更一般的Class< T >::new
2、靜態方法引用:
語法是Class::static_method
3、類方法引用:
語法是Class::method
4、實例方法引用:
語法是instance::method
例子:(類名隨意的)
//@FunctionalInterface
// interface Supplier<T> {
// T get();
//}
import com.oracle.webservices.internal.api.databinding.DatabindingMode;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
/***
* 方法引用+lambda
*/
public class Java8Functional {
public static void main(String[] args) {
/***
* 構造器引用:它的語法是Class::new,或者更一般的Class< T >::new
*/
Cup cup = Cup.create(Cup::new);
cup.setHigh(10);
cup.setLength(10);
cup.setWidth(5);
List<Cup> cups = new ArrayList<Cup>();
cups.add(cup);
cups.forEach(System.out::println);
/***
* 靜態方法引用:它的語法是Class::static_method
*/
Supplier<Cup> runCup = Cup::getCup;
cups.add(runCup.get());
System.out.println(runCup.get());
cups.forEach(System.out::println);
/***
* 特定類的任意對象的方法引用:它的語法是Class::method實例如下:
*/
cups.forEach(Cup::c_method);
/***
* 特定對象的方法引用:它的語法是instance::method實例如下
*/
final Cup cup2 = Cup.create(Cup::new);
cup2.setHigh(2);
cup2.setWidth(2);
cup2.setLength(3);
cups.add(cup2);
cups.forEach(cup2::n_method);
}
}
@Data
class Cup {
private int high;
private int width;
private int length;
/**
* 構造器引用:
*/
static Cup create(Supplier<Cup> cup) {
//Supplier是jdk1.8的接口,這裏和lamda一起使用了
System.out.println("create ,構造器引用" + cup.getClass().getName());
return cup.get();
}
/****
*靜態方法引用:它的語法是Class::static_method測試用
*/
static Cup getCup() {
Cup cup = Cup.create(Cup::new);
cup.setWidth(8);
cup.setLength(6);
cup.setHigh(6);
System.out.println("靜態方法引用:它的語法是Class::static_method");
return cup;
}
/**
* 特定類的任意對象的方法引用:它的語法是Class::method,測試用
*/
void c_method()
{
System.out.println("特定類的任意對象的方法引用:語法是Class::method,"+this+"----"+this.getHigh());
}
/**
* 特定對象的方法引用:它的語法是instance::method,測試用
*/
void n_method(final Cup cup)
{
System.out.println("特定對象方法引用:語法是instance::method,"+cup+"----"+cup.getHigh());
}
}