Хорошо, вот мой вопрос: у меня есть абстрактный суперкласс, который содержит метод public double[][] extractFeatures(BufferedImage image) throws Exception
.
Я хочу переопределить его (то есть, чтобы моя реализация подкласса вызывалась, когда я определяю объект подкласса). Проблема в том, что реализация, которую я использую, требует параметризации необработанного типа, например <II extends ImageSingleBand>
, для правильной работы (в противном случае будут ошибки). Итак, теперь подпись становится:
public <II extends ImageSingleBand> double[][] extractFeatures(BufferedImage image)
Проблема в том, что компиляторы Java дают мне конфликт имени, отмечая, что он имеет
то же стирание, но не отменяет его
Факт, который может помочь, заключается в том, что в методе подкласса extractFeatures()
, когда я не использую параметризацию исходного типа, возникает ошибка, когда код объявляет переменную:
Class<II> integralType = ...
Изменение этого на Class<II extends ImageSingleBand> integralType = ...
также не решило проблему.
Я знаю, что могу обойти эту проблему разными способами:
(a) Переименование
extractFeatures()
подкласса (я могу использовать его в моем случае, я бы предпочел более последовательное решение)(b) Перемещение всех частей, требующих параметризации необработанного типа, в другую функцию, которую можно вызвать внутри подкласса
extractFeatures()
(это решение выбрал предыдущий кодировщик), поэтому я не прошу решения, которое работает, а для прояснения ситуации.
Мой вопрос заключается в том, есть ли способ решить эту проблему без использования обходного решения, подобного упомянутому ранее, или эта проблема стирания связывает мне руки.
II
в сигнатуре метода - зачем вам это нужно? - person Boris the Spider   schedule 05.06.2014Class<II> integralType = ...
. - person Eypros   schedule 05.06.2014