在其接口中具有泛型参数的方法:
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 是类型变量:
A#1 扩展类 AbstractAssert 中声明的
对象 A#2 扩展接口中声明的对象断言
还有其他方法吗?
assertJ
用 Object 遮蔽泛型参数有什么好处?