从最初开始,引用基本针对引用类型完成的,也就是数组,类,接口,现在追加方法引用,引用本质就是别名,方法引用有四种方式:
1.引用静态方法:类名称 ::static 方法名称
2.引用某个对象的方法:实例化对象::普通方法
3.引用某个特定类的方法:类名称::普通方法
4 .引用构造方法:类名称::new;
1 引用静态方法
package com.wjx.sayHello;
interface IUtil<P,R>{
public R changeType(P p);
}
public class TestDemo {
public static void main(String[] args){
IUtil<Integer,String> iu=String::valueOf ;//进行方法引用
String str=iu.changeType(1000); // 相当于String.valueOf(1000)
System.out.println(str.length());
}
}
2.引用某一个对象中 的方法
package com.wjx.sayHello;
interface IUtil<R>{
public R changeType();
}
public class TestDemo {
public static void main(String[] args){
IUtil<String> iu="hello"::toUpperCase ;//进行方法引用
String str=iu.changeType(); // 相当于String.valueOf(1000)
System.out.println(str);
}
}
3.引用类中的普通方法:
package com.wjx.sayHello;
interface IUtil<R,P>{
public R 比较字符大小哈哈哈(P p1,P p2);
}
public class TestDemo {
public static void main(String[] args){
IUtil<Integer,String> iu=String::compareTo;//进行方法引用
System.out.println(iu.比较字符大小哈哈哈("b", "a"));
}
}
4,引用构造方法
package com.wjx.sayHello;
class Person1{
private int age;
private String name;
public Person1(String name,int age){
this.age=age;
this.name=name;
}
@Override
public String toString() {
return "Person1 [age=" + age + ", name=" + name + "]";
}
}
interface IUtil<R,PN,PS>{
public R create(PN name,PS age);
}
public class TestDemo {
public static void main(String[] args){
IUtil<Person1,String,Integer> iu=Person1::new;//进行方法引用
System.out.println(iu.create("张三", 12));
}
}