Count variable parameters of lambda function in Java

时间:2015-11-12 12:07:15

标签: java lambda variadic-functions

How can you count the number of parameters while initializing a variadic function/lambda expression? Or: how can you determine the arity of a lambda-expression?

Example:

public class MathFunction{

  private java.util.function.Function <double[], Double> function = null;
  private int length = 0;

  public MathFunction ( Function <double[], Double> pFunction ){    
    this.function = pFunction;
    this.length = ???
  }
}

Now, if you init a new MathFunction like this,

MathFunction func = new MathFunction((x) -> Math.pow(x[0], x[1]));

how can you count the passed parameters (here: two) in the MathFunction-constructor ?

1 个答案:

答案 0 :(得分:3)

你不能。

MathFunction声明一个构造函数,它接受一个参数,即Function。此函数将在双数组上运行并返回Double。但请注意,此函数可以在任何长度的任何双数组上运行。

该函数无法知道数组的长度:它只知道它可以在双数组上运行,无论其长度如何。

考虑一下这些lambdas:

x -> Math.pow(x[0], x[1])
x -> Math.pow(x[0], x[1]) + x[2]
x -> x[0]

它们都是有效的lambda,它们都符合相同的Function<double[], Double>,所有它们都会在不同长度的数组上运行。

唯一的解决方案是将数组的长度作为第二个参数传递给构造函数。

public MathFunction ( Function <double[], Double> pFunction, int length ){    
    this.function = pFunction;
    this.length = length;
}

顺便说一句,这不称为arity,这个术语指的是variable arguments