样例接口,唯一方法的签名为一个int参数,一个MyClass类型返回值
interface MyCons {
MyClass func(int n);
}
样例类,静态内部类(是次要的),唯一构造方法,一个int参数
static class MyClass {
private int val;
MyClass(int v) {
val = v;
}
public int getValue() {
return val;
}
}
准备拿来充当实现的方法
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方法的实现
MyClass maxValObj = Collections.max(a1, MethodReference::compareMC);
//2,lambda 表达式
MyClass maxValOb2 = Collections.max(a1, (a, b)->(a.getValue() - b.getValue()));
//3,普通形式,匿名内部类
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的构造函数作为func的实现, 方法签名一致
MyCons con = MyClass::new;
MyClass ins = con.func(10);
}
/**数组初始化*/
public static void construct2Ref() {
IntFunction<int[]> arrayMaker = int[]::new; //唯一方法int[] apply(int)
int[] array = arrayMaker.apply(10); // 创建数组 int[10]
}
/**函数式*/
public static void memberMethodRef() {
Arrays.asList("aa","bb","cc").forEach(System.out::println);
}