个性化阅读
专注于IT技术分析

Java函数接口

完全包含一种抽象方法的接口称为函数接口。它可以具有任意数量的默认静态方法, 但只能包含一个抽象方法。它还可以声明对象类的方法。

函数接口也称为单一抽象方法接口或SAM接口。它是Java中的新功能, 有助于实现功能编程方法。


例子1

@FunctionalInterface
interface sayable{
	void say(String msg);
}
public class FunctionalInterfaceExample implements sayable{
	public void say(String msg){
		System.out.println(msg);
	}
	public static void main(String[] args) {
		FunctionalInterfaceExample fie = new FunctionalInterfaceExample();
		fie.say("Hello there");
	}
}

立即测试

输出:

Hello there

函数接口可以具有对象类的方法。请参见以下示例。

例子2

@FunctionalInterface
interface sayable{
	void say(String msg);	// abstract method
	// It can contain any number of Object class methods.
	int hashCode();
	String toString();
	boolean equals(Object obj);
}
public class FunctionalInterfaceExample2 implements sayable{
	public void say(String msg){
		System.out.println(msg);
	}
	public static void main(String[] args) {
		FunctionalInterfaceExample2 fie = new FunctionalInterfaceExample2();
		fie.say("Hello there");
	}
}

立即测试

输出:

Hello there

函数接口无效

函数接口只有在没有任何抽象方法时才能扩展另一个接口。

interface sayable{
	void say(String msg);	// abstract method
}
@FunctionalInterface
interface Doable extends sayable{
	// Invalid '@FunctionalInterface' annotation; Doable is not a functional interface
	void doIt();
}

输出:

compile-time error

例子3

在以下示例中, 函数接口扩展为非函数接口。

interface Doable{
	default void doIt(){
		System.out.println("Do it now");
	}
}
@FunctionalInterface
interface Sayable extends Doable{
	void say(String msg);	// abstract method
}
public class FunctionalInterfaceExample3 implements Sayable{
	public void say(String msg){
		System.out.println(msg);
	}
	public static void main(String[] args) {
		FunctionalInterfaceExample3 fie = new FunctionalInterfaceExample3();
		fie.say("Hello there");
		fie.doIt();
	}
}

立即测试

输出:

Hello there
Do it now

Java预定义函数接口

Java提供了预定义的函数接口, 以使用lambda和方法引用来处理函数编程。

你还可以定义自己的自定义函数接口。以下是放置在java.util.function包中的函数接口的列表。


接口 描述
BiConsumer <T, U> 它表示一个接受两个输入参数且不返回结果的操作。
Consumer<T> 它表示一个接受单个参数且不返回结果的操作。
函数<T, R> 它代表一个接受一个参数并返回结果的函数。
Predicate<T> 它表示一个参数的谓词(布尔值函数)。
BiFunction <T, U, R> 它代表一个接受两个参数并返回结果的函数。
BinaryOperator<T> 它表示对两个相同数据类型的操作数的操作。它返回与操作数相同类型的结果。
BiPredicate <T, U> 它表示两个参数的谓词(布尔值函数)。
BooleanSupplier 它表示布尔值结果的提供者。
DoubleBinaryOperator 它表示对两个双精度类型操作数的运算, 并返回双精度类型值。
DoubleConsumer 它表示一个接受单个双精度类型参数且不返回结果的操作。
DoubleFunction<R> 它代表一个接受双精度类型参数并产生结果的函数。
DoublePredicate 它表示一个双精度类型实参的谓词(布尔值函数)。
DoubleSupplier 它代表双重结果的供应商。
DoubleToIntFunction 它代表一个接受双精度类型参数并产生int类型结果的函数。
DoubleToLongFunction 它代表一个接受双精度类型参数并产生长型结果的函数。
DoubleUnaryOperator 它表示对单个双精度类型操作数的操作, 该操作数产生双精度类型的结果。
IntBinaryOperator 它表示对两个int类型操作数的运算, 并返回int类型结果。
IntConsumer 它表示一个接受单个整数参数且不返回结果的操作。
IntFunction<R> 它代表一个接受整数参数并返回结果的函数。
IntPredicate 它表示一个整数参数的谓词(布尔值函数)。
IntSupplier 它表示整数类型的供应商。
IntToDoubleFunction 它表示一个接受整数参数并返回双精度值的函数。
IntToLongFunction 它表示一个接受整数参数并返回long的函数。
IntUnaryOperator 它表示对产生整数结果的单个整数操作数的运算。
LongBinaryOperator 它表示对两个长型操作数的运算, 并返回长型结果。
LongConsumer 它表示一个接受单个long类型参数且不返回结果的操作。
LongFunction<R> 它表示一个接受长型参数并返回结果的函数。
LongPredicate 它表示一个长型参数的谓词(布尔值函数)。
LongSupplier 它代表长型结果的供应商。
LongToDoubleFunction 它表示一个接受长型参数并返回双精度型结果的函数。
LongToIntFunction 它代表一个接受长型参数并返回整数结果的函数。
LongUnaryOperator 它表示对单个long类型操作数的操作, 该操作返回long类型的结果。
ObjDoubleConsumer<T> 它表示一个操作, 该操作接受一个对象和一个double参数, 并且不返回任何结果。
ObjIntConsumer<T> 它表示一个接受对象和整数参数的操作。它不返回结果。
ObjLongConsumer<T> 它表示一个接受对象和长参数的操作, 不返回任何结果。
Supplier<T> 它代表结果的提供者。
ToDoubleBiFunction<T, U> 它代表一个接受两个参数并产生双精度类型结果的函数。
ToDoubleFunction<T> 它表示一个返回双精度类型结果的函数。
ToIntBiFunction <T, U> 它表示一个接受两个参数并返回整数的函数。
ToIntFunction<T> 它代表一个返回整数的函数。
ToLongBiFunction <T, U> 它代表一个接受两个参数并返回long类型结果的函数。
ToLongFunction<T> 它表示一个返回long类型结果的函数。
UnaryOperator<T> 它表示对单个操作数的操作, 该操作返回与操作数相同类型的结果。
赞(0)
未经允许不得转载:srcmini » Java函数接口

评论 抢沙发

评论前必须登录!