樣例接口病曾,唯一方法的簽名為一個int參數(shù)秕噪,一個MyClass類型返回值
interface MyCons {
MyClass func(int n);
}
樣例類钳降,靜態(tài)內(nèi)部類(是次要的),唯一構(gòu)造方法腌巾,一個int參數(shù)
static class MyClass {
private int val;
MyClass(int v) {
val = v;
}
public int getValue() {
return val;
}
}
準備拿來充當實現(xiàn)的方法
private static int compareMC(MyClass a, MyClass b) {
return a.getValue() - b.getValue();
}
(它的標準形式
private static <T> int compareAny(T t, T t1) {
return 0;
}
public static void ref1() {
List<MyClass> a1 = new ArrayList<MyClass>();
a1.add(new MyClass(1));
a1.add(new MyClass(4));
a1.add(new MyClass(2));
a1.add(new MyClass(9));
a1.add(new MyClass(3));
a1.add(new MyClass(7));
//UseMethodRef::compareMC生成了抽象接口Comparator定義的compare()方法的實例遂填。
//1铲觉,生成Comparator實例,并指定compareMC為其compare方法的實現(xiàn)
MyClass maxValObj = Collections.max(a1, MethodReference::compareMC);
//2吓坚,lambda 表達式
MyClass maxValOb2 = Collections.max(a1, (a, b)->(a.getValue() - b.getValue()));
//3撵幽,普通形式,匿名內(nèi)部類
MyClass maxValOb3 = Collections.max(a1, new Comparator<MyClass>() {
@Override
public int compare(MyClass a, MyClass b) {
return a.getValue() - b.getValue();
}
});
System.out.println("Maximum value is: " + maxValObj.getValue());
}
/**對象初始化*/
public static void construct1Ref() {
////將MyClass的構(gòu)造函數(shù)作為func的實現(xiàn), 方法簽名一致
MyCons con = MyClass::new;
MyClass ins = con.func(10);
}
/**數(shù)組初始化*/
public static void construct2Ref() {
IntFunction<int[]> arrayMaker = int[]::new; //唯一方法int[] apply(int)
int[] array = arrayMaker.apply(10); // 創(chuàng)建數(shù)組 int[10]
}
/**函數(shù)式*/
public static void memberMethodRef() {
Arrays.asList("aa","bb","cc").forEach(System.out::println);
}