如何从AbstractAssert重写泛型isEqualTo

时间:2015-03-19 17:39:59

标签: assertj

在其接口中使用泛型参数的方法:

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增加什么?

1 个答案:

答案 0 :(得分:2)

isEqualToObject作为参数的原因是灵活的。

示例:

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

您无法覆盖方法并缩小其参数类型。