如何从 AbstractAssert 覆盖泛型 isEqualTo

How to override generic isEqualTo from AbstractAssert

接口中带有泛型参数的方法:

interface Assert<S, A> {
    S isEqualTo(A expected);

在其摘要中被 Object 参数覆盖 class:

abstract class AbstractAssert<S ..., A> implements Assert<S, A> {
    @Override
    S isEqualTo(Object expected)

如何使用 Assert<S, A> 的通用参数 A 覆盖 isEqualTo(),如

class MyAssert extends AbstractAssert<MyAssert, MyClass> {
    @Override
    MyAssert isEqualTo(MyClass expected)

由于类型擦除而失败:

name clash: isEqualTo(MyClass) in MyAssert overrides a method whose erasure is the same as another method, yet neither overrides the other

first method: isEqualTo(Object) in AbstractAssert
second method: isEqualTo(A#2) in Assert
where A#1,A#2 are type-variables:
A#1 extends Object declared in class AbstractAssert
A#2 extends Object declared in interface Assert

还有其他方法吗?

用 Object 隐藏通用参数有什么 assertJ 好处?

isEqualTo之所以取一个Object作为参数是为了灵活

示例:

Object name = "John";
// would not compile if isEqualTo expected a String parameter 
assertThat("John").isEqualTo(name);

您不能重写方法并缩小其参数类型。