Anm*_*pta 4 java generics junit
我正在使用JUnit 4.12.断言方法本质上不是通用的.例如,assertEquals方法如下所示:
static public void assertEquals(Object expected, Object actual) {..}
Run Code Online (Sandbox Code Playgroud)
为什么不喜欢?
static public <T> void assertEquals(T expected, T actual) {..}
Run Code Online (Sandbox Code Playgroud)
我觉得需要通用方法声明来更好地编译时间和IDE自动完成.
有这样的通用方法:
<T> void assertEquals(T expected, T actual) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
为了避免比较不同的类型,你没有类型安全性:你可以将任何东西传递给这个方法,因为T
退化到它的上限,Object
:
assertEquals("string", 0); // Compiles fine, even though they can't be equal.
Run Code Online (Sandbox Code Playgroud)
而且也不能对你使用任何方法expected
,并actual
没有被发现Object
.所以,T
基本上就是这样Object
.
因此,添加泛型只是使实现过于复杂.
现在,您可以定义一个这样的类:
class GenericAssert<T> {
void assertEquals(T expected, T actual) { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
你可以这样使用:
new GenericAssert<String>().assertEquals("string", 0); // Compiler error.
Run Code Online (Sandbox Code Playgroud)
因为你现在已经assertEquals
在类级别的可接受参数上设置了更严格的上限.
但这感觉有点尴尬.
归档时间: |
|
查看次数: |
750 次 |
最近记录: |