這裏是我的一羣學生提出的問題的意譯,而且事實證明,找到一個答案是有點麻煩(對我來說,反正)比我預期:測試方法是否返回雙打
假設您要求我編寫一個具有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