在Java 8中,有一个类似于函数点的功能(java.util.function.Function
)。通常是这样使用的:Function<LookupKey,LookupResult>
,但是,如果该方法返回原始类型,则存在问题。Function<ArgType,Void.TYPE>
不起作用,它无法使用非常令人困惑的错误消息进行编译("找不到符号Void.TYPE
")。我宁愿避免更改我的方法返回Object
只是为了通过NULL。
如果您的函数不返回值,请考虑使用Consumer<T>
代替。
如果您的功能应返回ìnt
或long
考虑使用返回原始类型的ToIntFunction<T>
或ToLongFunction<T>
。
如果您的功能应返回boolean
,请使用Predicate<T>
。
最后,如果您需要消耗原始类型,但要返回参考类型,请使用IntFunction<T>
或LongFunction<T>
。
完成列表:IntToLongFunction
,LongToIntFunction
,IntUnaryOperator
和LongUnaryOperator
支持要消费和返回的原始类型。
改用消费者界面。一个不返回任何内容的过程不是"函数"。
如Harmlezz所述,您应该使用ToIntFunction<T>
或任何其他" topRimitiveType "功能,如果您的方法不返回任何值,请使用Consumer<T>
。
但为了完成 - 出于好奇心,有可能:
您注意到,Java中有一个Void
类,您可以定义返回Void
的函数:
Function<Long,Void> f = i -> {
System.out.println(i);
return ???;
};
当然,您只能返回null
,但这会导致NullPoInterExceptions,例如,这无法正常工作
f.apply(123L).toString();
您无法创建Void
实例 - 除非您使用反射:)
因此,让我们创建一个void的文字(假设安全设置不禁止它)
static Void VOID;
static {
try {
Constructor<Void> vc = Void.class.getDeclaredConstructor();
vc.setAccessible(true);
VOID = vc.newInstance();
} catch (Exception e) {
throw new Error(e);
}
}
现在您只需返回您的功能中的这个文字:
Function<Long,Void> f = i -> {
System.out.println(i);
return VOID;
};
,该功能应用将导致类型void
的非零结果结果System.out.println(f.apply(123L).getClass());
打印出来:
123
class java.lang.Void
但是,除非您要演示毫无意义的边缘案例,否则切勿在代码中使用它;)