最近我一直在摆弄新的java8功能,以便更好地理解它们.
当Stream.filter我尝试一些东西时,我遇到了Predicate.java其中我找到了以下isEqual方法实现的来源:
/**
* Returns a predicate that tests if two arguments are equal according
* to {@link Objects#equals(Object, Object)}.
*
* @param <T> the type of arguments to the predicate
* @param targetRef the object reference with which to compare for equality,
* which may be {@code null}
* @return a predicate that tests if two arguments are equal according
* to {@link Objects#equals(Object, Object)}
*/
static <T> Predicate<T> isEqual(Object targetRef) {
return …Run Code Online (Sandbox Code Playgroud) 在研究这个时我发现了这个问题:为什么C#允许只有方法的最后一个参数是"可变长度"
虽然我100%同意那里的答案,并且理解允许这样的事情的规则将如那里所说的那样令人恐怖地复杂,但它并没有为我提供实际问题的答案.链接的问题谈到T f(params A[] a, params B[] b),所以params关键字的多个参数.
但是没有提到以下想法:
void Foo(int head, params int[] body, int tail)
Run Code Online (Sandbox Code Playgroud)
或者更具体地说:不要问为什么你不能有多个的params参数,我们为什么不能有一个单一的 params参数,但只是没有在最后(或者中间的某个位置,或开头)?
我想不出为什么那会复杂的一个原因,但请证明我错了!
例如,假设以下函数:
void Foo(int head, params int[] body, int tail)
{
Console.WriteLine($"{head} [{string.Join(", ", body)}] {tail}");
}
Run Code Online (Sandbox Code Playgroud)
我认为结果应该是什么毫无疑问.
Foo(1, 2) // 1 [] 2
Foo(1, 2, 3) // 1 [2] 3
Foo(1, 2, 3, 4) // 1 [2, 3] 4
Run Code Online (Sandbox Code Playgroud)
没有"如何确定何处a结束并b开始呢?" (关于链接问题的最高评论)在这种情况下,所以我没有看到问题.