可能重复:
When do you use Java’s @Override annotation and why?何时使用@覆盖在Java
根据JavaDoc为@Override注释:
表示一个方法声明旨在 覆盖超类中的方法 声明。如果 方法用此 注释类型进行注释,但不覆盖 超类方法,编译器将生成错误消息所需的 。
当我想测试一个类型的特定方法并替换我的测试主题调用的其他方法的行为时,我倾向于在测试中使用@Override注释。我的一位同事坚定地认为,这不是一个有效的用途,但不知道为什么。任何人都可以提出为什么要避免?
我在下面添加了一个例子来说明我的用法。
被测试者富:
public class Foo {
/**
* params set elsewhere
*/
private Map<String, String> params;
public String doExecute(Map<String, String> params) {
// TODO Auto-generated method stub
return null;
}
public String execute() {
return doExecute(params);
}
}
我会定义这样的测试:
public void testDoExecute() {
final Map<String, String> expectedParams = new HashMap<String, String>();
final String expectedResult= "expectedResult";
Foo foo = new Foo() {
@Override
public String doExecute(Map<String, String> params) {
assertEquals(expectedParams, params);
return expectedResult;
}
};
assertEquals(expectedResult, foo.execute());
}
然后,如果我的doExecute()签名的变化,我会得到我的测试编译错误,而不是一个令人困惑的执行失败。
dupe,但现在找不到它... – jjnguy 2009-07-01 13:32:54
发现它:http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – AlbertoPL 2009-07-01 13:34:16