这是我向一群学生提出的一个问题的解释,事实证明,找到答案比我预期的要困难一些(无论如何,对我来说):
假设您要求我编写一个方法 f,它有一个 String 参数并返回一个 double。现在,您希望通过编写自己的测试代码来测试我是否正确完成了工作,如果我按照指定编写了 f,则该代码将编译,但如果没有按指定编写,则不会编译。
一些学生提出了这个错误的解决方案:
System.out.println(f("cat"));
这不是一个好的测试器,因为它不测试方法的返回类型。也就是说,即使我编写了 f 返回 String、int 或 boolean 等,它也会编译。
我向学生们提出了这个解决方案:
double d = f("cat");
我推断这会测试 f 是否接受字符串并返回 double 。但实际上,这也不好。 f 可以返回 int (或任何“更窄的”原始数据类型),结果可以存储在 d 中。
所以,我正在寻找一个简单解决方案(也许是一两行代码?)来解决这个问题:编写在 f 已正确定义的情况下可以编译的代码(字符串参数,双返回),但如果f没有按照指定的方式编写,则不会编译。
最佳答案
一般来说,反射是最适合这里的(这是一个非常不寻常的要求),但至少可以使用重载解析的其他方法是:提供带有 float
参数的替代方法,long
和 Double
,但返回类型为 void
...并且其方法的参数类型为 double
和一个非 void 返回类型。然后检查您是否可以为使用 f
的结果调用该方法的结果赋值。例如:
public void foo(long x) {}
public void foo(float x) {}
public void foo(Double x) {}
public void foo(Object x) {}
public int foo(double x) {
return 0;
}
// This will only compile if f is declared to return double
int check = foo(f("cat"));
关于java - 测试方法是否返回 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377377/