这里是我的一群学生提出的问题的意译,而且事实证明,找到一个答案是有点麻烦(对我来说,反正)比我预期:测试方法是否返回双打
假设您要求我编写一个具有String参数的方法f,并返回一个double。你现在希望通过编写你自己的测试代码来测试我是否已经正确地完成了自己的工作,如果我已经按照指定编写了f,那么这些代码将会被编译,但是如果我没有编写则不会编译。
有些学生提出的这个不正确的解决方案:
System.out.println(f("cat"));
这不是一个很好的测试,因为它并不测试方法的返回类型。也就是说,即使我写了f来返回一个String或一个int或一个布尔值,它也会被编译,等等。
我提出的这个解决方案给学生:
double d = f("cat");
我的理由是,这个测试F是否接受字符串并返回双打。但是,真的,这也不好。 f可以返回一个int(或任何“较窄”的原始数据类型),并且结果可以存储在d中。
所以,我正在寻找的想法,一个简单的解决(代码一行或两行,也许?)的问题:写代码如果f已被正确定义(字符串参数,将编译,双倍返还),但如果f没有按照指定写入,则不会编译。
[反思](http://docs.oracle.com/javase/tutorial/reflect/)。 – Maroun
我意识到Java的反射存在,但没有使用它。我不知道它满足摆在问题中的“编译时测试”部分,但我确实知道Reflection有很多开销。有没有非反射解决方案? – normKrumpe