gpt4 book ai didi

java - 干燥 Java(lambda 函数?)

转载 作者:行者123 更新时间:2023-12-01 19:46:28 26 4
gpt4 key购买 nike

我正在用 java 编写一个程序,它本质上测试了很多东西......

对于每次调用,我都需要检查 NullPointerExceptionsStackOverflowIndexOutOfBounds 等...

现在我的每个方法都有这种重复模式:

try {
doSomething();
} catch(NullPointerExceptions npe) {
// prints something
} catch(StackOverflow soe) {
// prints something
} catch(IndexOutOfBounds iob) {
// prints something
}

由于我可能会在一个方法中多次调用 doSomething() (使用不同的参数),所以我不能只是将异常抛出回 main (因为我需要下一个测试才能实际运行)。

我想编写一个可以向其传递函数的 lambda 测试器,但我找不到用 java 实现此目的的方法:(。

我想做这样的事情:

private void test(Method m, E expectedValue) {
try {
if(!m.run().equals(expectedValue))
System.out.println("FAILED TEST: "+m.name()+". Value was "+m.run()+", should have been "+expectedValue);
} catch() {
// see above
}
}

最佳答案

在 Java 中你能做的最好的事情就是使用接口(interface):

interface DoSomething<E extends Comparable<E>> {
E doSomething();
}

然后你的test方法可以如下所示:

private void test(DoSomething<E> m, E expectedValue) {
try {
if(!m.doSomething().equals(expectedValue))
System.out.println("FAILED TEST");
} catch() {
//handle exception
}
}

E需要延长Comparable<E>因为你正在调用equals test里面.

这称为 SAM(单一抽象方法)接口(interface)。使用 SAM 类和接口(interface)来模拟 lambda 在 Java 中很常见。我什至听说过他们被称为“SAMbdas”。

编辑:我的解决方案不一定涉及修改现有类:

DoSomething foo = new DoSomething<String>() {
public String doSomething() { return "Hello World"; }
};
test(foo, "Hello World");

关于java - 干燥 Java(lambda 函数?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5450899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com