/**
* 功能描述:需要重写的方法的功能,在其他地方已经重写过了,就可以引用这个方法
* 传入的参数类型和返回的类型要一致,
* 不可能我传入int参数,你要传入参数是string,我需要返回一个int,你却返回一个string
* (上述描述只适用于格式一二,不适用格式三)
* 格式一:对象::实例方法
* 格式二: 类 ::静态方法
* 格式三: 类 ::非静态方法
* 方法参数描述:无
*/
class Test方法引用 {
/**
* 功能描述:格式一:对象::实例方法 格式二: 类 ::静态方法
* 例:现在重写compare方法功能与Integer里的compare方法一样
* 我就可以引用Integer里的compare方法,格式Integer::compare
* 表示我现在重写的compare方法与Integer里的compare方法一样
* 都是传入两个int型,返回一个int型
* 不一定需要方法名相同,只要传入的参数一样类型个数一样,返回的类型一样就可以了
* 方法参数描述:无
*/
@Test
public void test2() {
Comparator<Integer> zComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
};
//Lambda方式
Comparator<Integer> kvWeigher = (o1, o2) -> Integer.compare(o1, o2);
//引用::方式
Comparator<Integer> integerComparator = Integer::compare;
}
/**
* 功能描述:格式三: 类 ::非静态方法
* 不同点:
* 格式一二:
* compare(Integer o1, Integer o2)与Integer.compare(o1, o2)
* 格式三:不在是静态方法了,不能没有对象就调用,将一个参数作为对象调用方法
* compare(Integer o1, Integer o2)与o1.equals(o2)
* compare(Integer o1, Integer o2)与o1.compareto(o2)
* 传入参数还是一样多返回类型也一样,只不过现在是用在了不同位置,不仅仅用在形参的位置
* 方法参数描述:无
*/
@Test
public void test3() {
Comparator<Integer> zComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
//Lambdab的方式
Comparator<Integer> kvWeigher = (o1, o2) -> {
return o1.compareTo(o2);
};
//引用::的方式
Comparator<Integer> integerComparator = Integer::compareTo;
}
/**
* 功能描述:构造器引用---数组引用
* 构造器引用格式:类::new;
* 方法参数描述:无
*/
@Test
public void test4() {
//构造器引用
//实现了Quote接口,重写的方法中去实现了一个Test1005类的对象
Quote quote = Test1005::new;
//下面这个与上面的一样的功能
Quote quote1 = new Quote() {
@Override
public Object test() {
return new Test1005();
}
};
IntConsumer aNew2 = String[]::new;
//调用重写的方法就创建数组
aNew2.accept(1);
}
interface Quote {
Object test();
}
}
09-09