gpt4 book ai didi

java - 在Java中如何在更高级别调用函数时显示函数参数?

转载 作者:行者123 更新时间:2023-12-04 08:21:02 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can I get the current stack trace in Java?

(22 个回答)


8 个月前关闭。




为了练习算法问题,我将我的 Java 代码设置为:
问题类.java

public static void main(String[] args) {
Solution solution = new ProblemClass().new Solution();
Utils.isEqual(solution.function("abc"), "def");
}
public class {
public Solution {
public String function(String s) {}
}
}
Utils.isEqual 基本上包装了一个比较,如:
    public static void isEqual(Object actual, Object expected) {
if (actual == null && expected == null || actual.equals(expected)) {
System.out.println("Pass.");
} else {
System.out.println("Fail. Expecting: [" + expected + "] Actual result: [" + actual + "]");
}
}
当我运行数百个测试用例时,我在命令提示符上看到的是:
Pass.
Pass.
Pass.
Pass.
...
Fail. Expecting: [false] Actual result: [true]
...
我不知道什么测试用例失败了。我想知道哪些测试失败了。我愿意接受其他建议。到目前为止,我想也许有一种方法可以显示传入 function 的参数。打电话时 isEqual通过诸如反射之类的东西。我找不到明确的答案。
最后,我想将所有内容都保留在 main() 中,以便我所有的测试和代码都在一个地方,而不是有一个我必须管理的单元测试类。

最佳答案

你不能访问你的调用者传递给另一个函数的参数:方法参数只在方法仍在执行时存储;一旦方法完成执行,保存其参数的存储将被回收并重新用于其他目的(例如下一个要执行的函数的参数/局部变量)。
因此,您必须更改代码的结构,以便将该值以某种方式传递给需要它的函数。一个简单的方法是添加一个额外的参数:

public static void assertEquals(String actual, String input, String expected) {
if (Objects.equals(actual, expected) {
System.out.println(input + ": pass");
} else {
System.out.println(input + ": failed. Expected: " + expected + ", but got " + actual);
}
}
并称之为:
assertEquals(solution.function("abc"), "abc", "def");
这有效,但需要两次传递输入。避免这种情况的一种方法是传递解决方案而不是直接调用其方法:
check(solution, "abc", "def");
在哪里
check(Solution solution, String input, String expected) {
String actual = solution.function(input);
if (Objects.equals(expected, actual)) {
System.out.println(input + ": pass");
} else {
System.out.println(input + ": failed. Expected: " + expected + ", but got " + actual);
}
}
但是,这仍然需要 check知道调用哪个方法( function 是我们的例子)。如果您需要 check要使用任意方法,您可以传递方法本身而不仅仅是定义它的对象:
check(solution::function, "abc", "def");
在哪里
interface TestCase {
String func(String input);
}

void check(TestCase test, String input, String expectedOutput) {
String output = test.func(input);
// compare and print as before
}
尽管如此,在专业代码中,您可能会使用像 junit 这样的测试框架,而不是重新发明轮子。

关于java - 在Java中如何在更高级别调用函数时显示函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65500363/

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