在其接口中使用泛型参数的方法:
interface Assert<S, A> {
S isEqualTo(A expected);
在其抽象类中被Object
参数覆盖:
abstract class AbstractAssert<S ..., A> implements Assert<S, A> {
@Override
S isEqualTo(Object expected)
如何使用isEqualTo()
的通用参数A
覆盖Assert<S, A>
,
class MyAssert extends AbstractAssert<MyAssert, MyClass> {
@Override
MyAssert isEqualTo(MyClass expected)
由于类型擦除,失败:
名称冲突:MyAssert中的isEqualTo(MyClass)覆盖了一个方法,其擦除方法与另一个方法相同,但都不会覆盖另一个方法
第一个方法:AbstractAssert中的isEqualTo(Object) 第二种方法:Assert中的isEqualTo(A#2) 其中A#1,A#2是类型变量:
#1扩展了在AbstractAssert类中声明的Object #2扩展了在Assert接口中声明的Object
还有其他办法吗?
使用Object遮蔽泛型参数会assertJ
增加什么?
答案 0 :(得分:2)
isEqualTo
将Object
作为参数的原因是灵活的。
示例:
Object name = "John";
// would not compile if isEqualTo expected a String parameter
assertThat("John").isEqualTo(name);
您无法覆盖方法并缩小其参数类型。