Java中的原始功能接口

时间:2017-11-30 16:45:41

标签: java functional-programming

我想在给定的Primitive Functional Interface中返回double类型值:

  DoubleFunction<double> db1=(x)-> x+2;         
  System.out.println(db1.apply(23.6));

这给了我一个错误,但下面的代码是正确的:

  DoubleFunction<String> db1=(x)-> x +" is now a String";         
  System.out.println(db1.apply(23.6));

我想知道为什么泛型类型应该是String? 任何人都可以给我一个在Primitive Functional Interface中返回int / double的例子吗?

4 个答案:

答案 0 :(得分:4)

Generic总是适用于类,所以请使用

DoubleFunction<Double>
//             ^ mean class , you can't use primitive 

For further reading Generics

答案 1 :(得分:1)

在您的情况下,您可能希望a DoubleUnaryOperator仅对基元进行操作,而DoubleFunction<Double>将对值进行装箱/取消装箱。

DoubleUnaryOperator db1= x-> x + 2; //note: no need for brackets
System.out.println(db1.applyAsDouble(23.6));

答案 2 :(得分:1)

特别是double->double使用DoubleUnaryOperator代替,但一般情况下,如果没有合适的界面,您可以随时创建自己的界面。

无法支持原语作为通用参数是DoubleFunction首先存在而不仅仅是Function<double, SomeType>的唯一原因。

答案 3 :(得分:0)

尝试装箱,即

 DoubleFunction<Double> db1=(x)-> x+2;

当您使用原始double时,而不是类Double