Подводя итог советам на этой странице, я закончил со следующим:
keytool -genkeypair -keystore ~/.android/release.keystore -alias <my_alias> -storepass <my_cert_pass> -keyalg RSA
Затем я получил набор вопросов относительно имени, организации, местоположения и пароля для моего псевдонима.
Согласно выходному сигналу компилятора, в обоих примерах сигнатуры методов различны (скомпилируйте код с опцией -Xlint:unchecked
, чтобы подтвердить его):
<X>getSupplier() in A (m2)
1st snippet
getSupplier() in B (m1)
<X>getSuppliers(Collection<String> strings) in A (m2)
2nd snippet
getSuppliers(Collection<String> strings) in B (m1)
Согласно JLS , сигнатура метода m1 является поднайбой подписи сигнатуры метода m2, если либо:
blockquote>
- m2 имеет ту же подпись, что и m1 , или
- подпись m1 такая же, как стирание подписи m2.
Первое утверждение выходит из игры - метод подписи разные. Но как насчет второго утверждения и стирания?
Valid Override
B.getSupplier()
(m1) является подъявлениемA.<X>getSupplier()
(m2), потому что:blockquote>
- подпись m1 такая же, как стирание сигнатуры m2
<X>getSupplier()
после стирания равноgetSupplier()
.Недопустимое переопределение
B.getSuppliers(...)
(m1) не является поднаклейкойA.<X>getSuppliers(...)
(m2), потому что:blockquote>
- подпись m1 не совпадает с стиранием сигнатуры m2
Подпись m1:
getSuppliers(Collection<String> strings);
Утечка сигнатуры m2 :
getSuppliers(Collection strings);
Изменение аргумента m1 от
Collection<String>
до необработанногоCollection
устраняет ошибку, в этом случае m1 становится поднаклейкой m2.Заключение
1-й фрагмент кода (действительный переопределение) : сигнатуры метода в родительском и дочернем классах отличаются изначально. Но после применения стирания к родительскому методу подписи становятся одинаковыми.
2-й фрагмент кода (недопустимое переопределение) : сигнатуры метода первоначально отличаются и остаются разными после применения стирать родительский метод.
В тот момент, когда вы добавили параметр, он переставал быть переопределяющим и стал перегрузкой.
Дженерики не имеют к этому никакого отношения.