23.方法的引用和Function接口
23.1 知识点
什么是方法的引用
使用函数式接口去装载我们在类中声明的方法,而不是lambda表达式。
如何进行方法的引用
声明一些函数型接口
import java.util.function.Function;
interface ITest01
{
void fun();
}
interface ITest02
{
Lesson23_方法的引用和Function接口 fun();
}
interface ITest03
{
Lesson23_方法的引用和Function接口 fun(int a);
}
interface ITest04
{
Integer[] fun(int n);
}
interface ITest05<T>
{
void fun(T i);
}
声明一些方法
public class Lesson23_方法的引用和Function接口
{
public Lesson23_方法的引用和Function接口()
{
System.out.println("无参构造");
}
public Lesson23_方法的引用和Function接口(int i)
{
System.out.println("有参构造" + i);
}
public static void Test()
{
System.out.println("方法调用");
}
public void Test2()
{
System.out.println("方法调用2");
}
//泛型方法
static public <T> void Test3(T i)
{
System.out.println(i);
}
}
1. 引用静态方法
// 类名::静态方法名
ITest01 t = Lesson23_方法的引用和Function接口::Test;
t.fun();// 方法调用
2. 引用成员方法
// 对象名::成员方法名
Lesson23_方法的引用和Function接口 l = new Lesson23_方法的引用和Function接口();// 无参构造
ITest01 t2 = l::Test2;
t2.fun();// 方法调用2
3. 引用构造函数
3-1. 无参和有参构造 类名::new
ITest02 tt = Lesson23_方法的引用和Function接口::new;
Lesson23_方法的引用和Function接口 l2 = tt.fun();// 无参构造
ITest03 tt2 = Lesson23_方法的引用和Function接口::new;
l2 = tt2.fun(99);// 有参构造99
3-2. 数组构造 类名[]::new
ITest04 tt4 = Integer[]::new;
Integer[] arr = tt4.fun(9);
System.out.println(arr.length);// 9
4. 引用泛型方法
// 函数式接口的泛型和对应的泛型方法 参数或返回值上一定要对应
ITest05<Integer> ttt = Lesson23_方法的引用和Function接口::Test3;
ttt.fun(999);// 999
Function接口
在java.util.function包中提供了预先定义好的函数式接口供使用,其中最常用的接口是 Function<T,R>接口。
调用方法:apply
Function<Integer, String> function = (a) ->
{
a += 99;
return a.toString();
};
System.out.println(function.apply(1));// 100
注意:更多的写好的函数式接口可以直接去function包中查看。如果不想记忆,那直接自己写函数式接口即可。
总结
不管是使用lambda表达式还是想要引用方法,都需要使用函数式接口来装载。除了Function以外Java中还写好了很多函数式接口供使用。用现成的还是自己写,自己决定即可。
23.2 知识点代码
import java.util.function.Function;
interface ITest01
{
void fun();
}
interface ITest02
{
Lesson23_方法的引用和Function接口 fun();
}
interface ITest03
{
Lesson23_方法的引用和Function接口 fun(int a);
}
interface ITest04
{
Integer[] fun(int n);
}
interface ITest05<T>
{
void fun(T i);
}
public class Lesson23_方法的引用和Function接口
{
public Lesson23_方法的引用和Function接口()
{
System.out.println("无参构造");
}
public Lesson23_方法的引用和Function接口(int i)
{
System.out.println("有参构造" + i);
}
public static void Test()
{
System.out.println("方法调用");
}
public void Test2()
{
System.out.println("方法调用2");
}
//泛型方法
static public <T> void Test3(T i)
{
System.out.println(i);
}
public static void main(String[] args)
{
//知识点1:什么是方法的引用
//使用函数式接口去装载我们在类中声明的方法
//而不是lambda表达式
//知识点2:如何进行方法的引用
//1.引用静态方法
// 类名::静态方法名
ITest01 t = Lesson23_方法的引用和Function接口::Test;
t.fun();//方法调用
//2.引用成员方法
// 对象名::成员方法名
Lesson23_方法的引用和Function接口 l = new Lesson23_方法的引用和Function接口();//无参构造
ITest01 t2 = l::Test2;
t2.fun();//方法调用2
//3.引用构造函数
// 3-1.无参和有参构造 类名::new
ITest02 tt = Lesson23_方法的引用和Function接口::new;
Lesson23_方法的引用和Function接口 l2 = tt.fun();//无参构造
ITest03 tt2 = Lesson23_方法的引用和Function接口::new;
l2 = tt2.fun(99);//有参构造99
// 3-2.数组构造 类名[]::new
ITest04 tt4 = Integer[]::new;
Integer[] arr = tt4.fun(9);
System.out.println(arr.length);//9
//4.引用泛型方法
//函数式接口的泛型和对应的泛型方法 参数或返回值上一定要对应
ITest05<Integer> ttt = Lesson23_方法的引用和Function接口::Test3;
ttt.fun(999);//999
//知识点3:Function接口
//我们再使用lambda表达式时都需要自己声明函数式接口用于装载
//为了方便我们的使用,Java在java.util.function包中提供了预先定义好的函数式接口供我们使用
//其中最常用的接口是 Function<T,R>接口
//T:参数类型
//R:返回值类型
//调用方法:apply
Function<Integer, String> function = (a) ->
{
a += 99;
return a.toString();
};
System.out.println(function.apply(1));//100
//注意:更多的写好的函数式接口 可以直接去function包中查看
//如果不想记忆,那直接自己写函数式接口即可
//总结
//不管是使用lambda表达式还是想要引用方法
//我们都需要使用函数式接口来装载
//除了Function以外Java中还写好了很多函数式接口供我们使用
//用现成的还是自己写,自己决定即可
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com