我正在使用 JUnit 4.12。断言方法本质上不是通用的。例如,assertEquals 方法如下所示:
static public void assertEquals(Object expected, Object actual) {..}
为什么不像?
static public <T> void assertEquals(T expected, T actual) {..}
我觉得需要通用方法声明来更好地进行编译时检查和 IDE 自动完成。
最佳答案
有一个像这样的通用方法:
<T> void assertEquals(T expected, T actual) { /* ... */ }
不提供类型安全以避免比较不同的类型:您可以将任何内容传递给此方法,因为 T
退化为其上限,Object
:
assertEquals("string", 0); // Compiles fine, even though they can't be equal.
而且您也不能在 object
上找不到的 expected
和 actual
上使用任何方法。所以,T
基本上只是 Object
。
因此,添加泛型只会使实现过于复杂。
现在,您可以像这样定义一个类:
class GenericAssert<T> {
void assertEquals(T expected, T actual) { /* ... */ }
}
你可以这样使用:
new GenericAssert<String>().assertEquals("string", 0); // Compiler error.
因为您现在在类级别对 assertEquals
的可接受参数设置了更严格的上限。
但这感觉有点尴尬。
关于java - 为什么 JUnit 断言方法在 Java 中不是通用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38787083/