Поле списка наследования наследования классов Java - PullRequest
0 голосов
/ 27 октября 2018

Я столкнулся с проблемой, у меня есть сгенерированный avro класс A и другой B, определенный следующим образом:

class A {
    String code;
}

class B {
     String someString;
     List<A> codes;
}

И пользовательские классы, которые расширяют два сгенерированных класса, описанных ранееПример:

class CustomA extends A {
    String type;
}

class CustomB extends B {
    List<CustomA> codes;
}

Это работает, если я удаляю Список <> , но мне это действительно нужно.Для геттеров / сеттеров я использую аннотации lombok @ Data .

У кого-нибудь есть решение, которое можно обойти?

Я полагаю, что такая же проблема появится с Карта <> , поэтому мне тоже нужно решение.

Спасибо за ваши ответы.

[РЕДАКТИРОВАТЬ] Поэтому я приведу более конкретные примеры с этими двумя снимками экрана ниже.

Вот мои объявления классов .Как я уже говорил, классы A и B (в данном случае User и ToDoItem) генерируются классами по схеме avro, поэтому я не могу изменять / записывать в нее. Вот ошибки компиляции у меня .

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Единственный способ сделать эту работу - это дженерики, как указал @ kiv_apple . С вашим сгенерированным кодом экземпляры CustomB всегда могут содержать ссылки на экземпляры A в списке codes. Вы не можете ограничить это, не касаясь определения класса B.

Поскольку в вашем случае это невозможно, вам нужно найти обходной путь. Одним из способов может быть определение пользовательского геттера с другим именем (без Lombok), который возвращает только те элементы codes, которые являются экземплярами CustomB.

0 голосов
/ 27 октября 2018

Вы можете использовать дженерики. Как

class B<T extends A> {
   List<T> codes;
}

class CustomB extends B<CustomA> {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...