Десериализация списка Java и возврат объекта дает ошибку несовместимых типов

Я пытаюсь десериализовать список SetOfMembers и хочу взять каждый объект Member отдельно после десериализации, чтобы сопоставить имя члена с заданной строкой.

"Несовместимые типы librarby.Member не могут быть преобразованы в Member, где Member является переменной типа. Член расширяет объект, объявленный в классе SetOfMembers"

Вышеупомянутая ошибка продолжает появляться, и я не могу понять проблему в своем коде. Если бы вы могли объяснить мне, что не так с моим кодом, это было бы здорово. Я использовал @SuppressWarnings ("unchecked"), но это тоже бесполезно. Пожалуйста, помогите. Спасибо

Ошибка


person isharailanga    schedule 09.03.2017    source источник
comment
Пожалуйста, включите код в виде текста. Изображения не могут быть найдены, не могут быть скопированы в текстовые редакторы и не могут отображаться в высококачественных шрифтах, что делает их менее читаемыми.   -  person VGR    schedule 10.03.2017


Ответы (2)


Мое первое предположение было бы, что

  1. Верхний и нижний фрагменты кода находятся в разных файлах
  2. В «верхний» файл вы импортировали (скорее всего, по предложению IDE) какой-то другой класс Member, например java.lang.reflect.Member, вместо вашего library.Member, и поэтому у вас есть эта ошибка.

Итак, чтобы исправить это, проверьте раздел импорта на первой плитке.

Если вам действительно нужны оба класса Member в одном файле, вы все равно можете использовать полные имена. Бьюсь об заклад, следующий код будет работать в любом случае.

for(library.Member mem : Serialization.deserializeMembers())
person SergGr    schedule 10.03.2017
comment
1. Верхний и нижний коды находятся в одной и той же библиотеке пакетов. 2. Никакой другой класс-член не импортируется. 3. Данный метод решил проблему. Спасибо, я не знал о встроенном классе-члене, и здесь возникла путаница. - person isharailanga; 10.03.2017
comment
Что касается (2), сообщение об ошибке конкретно относится к типу, что означает параметр универсального типа. Не импортированный класс. - person user207421; 11.03.2017

Десериализация списка Java и возврат объекта дает ошибку несовместимых типов

Нет, это не так.

  1. Это ошибка компиляции, и она возникает во время компиляции при компиляции кода. Нет при "десериализации".
  2. Ошибка вообще не связана с десериализацией: она связана с итерацией.
  3. Это ошибка, а не предупреждение, поэтому аннотация для подавления предупреждений не имеет значения.

Проблема четко указана в сообщении об ошибке. Поскольку вы не предоставили полный исходный код класса или даже метода, в котором он встречается, дальнейшее надежное продвижение невозможно.

Однако я догадываюсь, что:

  • первый метод является членом SetOfMember
  • SetOfMember параметрируется на <Member extends Object>.

... что полностью объяснило бы сообщение об ошибке. Проблема в том, что статический метод deserializeMembers() на самом деле не является универсальным. Исправление состоит в том, чтобы обобщить метод deserializeMembers():

public static <Member extends Object> SetOfMember<Member> deserializeMembers() throws ...
person user207421    schedule 09.03.2017