假设我想调用一个内置函数(意味着我不能改变它):
foo(int x, int y)
Run Code Online (Sandbox Code Playgroud)
我希望 x 和 y 的参数是随机的,但是是相同的随机数。我知道我可以做到这一点
double rand = Math.random();
foo(rand, rand);
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法在一行中做到这一点,而无需声明单独的变量?如
foo(Math.random(), Math.random());
Run Code Online (Sandbox Code Playgroud)
但让它们相同。只是好奇是否有一种简单的方法可以做到这一点,我不知道可以避免添加额外的行。也许我可以输入到第二个参数中,基本上告诉它“使它与第一个参数相同”?任何帮助是极大的赞赏。
我对 lambda 表达式很陌生,所以请耐心等待。假设我有一个带有单个抽象函数的接口:
public interface IAbsFunc {
public abstract void absFunc(int x);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以将 lambda 表达式存储在变量中:
public class Lambda {
public static void main(String[] args) {
IAbsFunc obj = (int x) -> System.out.println(x);
obj.absFunc(3);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,这就像将方法存储在变量中。但是,这已经可以通过 java.lang.reflect 完成:
public class Lambda {
public static void main(String[] args) throws Exception {
Method obj = PrintStream.class.getDeclaredMethod("println", int.class);
obj.invoke(System.out, 3);
}
}
Run Code Online (Sandbox Code Playgroud)
显然我在这里遗漏了一些东西。在什么情况下 lambda 表达式更可取?
我有一个在某些情况下返回 null 的函数,例如:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
}
Run Code Online (Sandbox Code Playgroud)
而且我想创建另一个函数,它执行完全相同的操作,只是在满足该条件时抛出错误而不是返回 null。我尝试这样做:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
public static Double barWithException(double a, double b) {
return bar(a, b) == null ? throw new IllegalArgumentException() : bar(a, b); …
Run Code Online (Sandbox Code Playgroud)