Интерфейс Java наследуется от двух других интерфейсов — возможно ли с помощью отражения Java удалить информацию об одном из интерфейсов?

#java #reflection #vaadin-flow

#java #отражение #vaadin-flow

Вопрос:

У меня есть это конкретное требование из-за того, что сторонняя библиотека каким-то образом имеет это interface A which extends B , который, в свою очередь extends C, D .

Теперь проблема в том, что interface C extends D . IMO, поскольку C уже расширяется D , B должен только extends C .

Проблема возникает, когда я пытаюсь использовать object of type interface A для привязки формы в потоке Vaadin. Сообщение об ошибке: Duplicate key found for property [this common method] .

Я проверил объект и заметил, что существует следующая иерархия:

        // myObject:
       //   reflectionData:
       //     referent:
       //       interfaces:
       //         [0]:
       //           name: "com.example...." [interface B from above]
       //           reflectionData:
       //             referent:
       //               interfaces:
       //                 [0]:
       //                   name: "com.example..." [interface C from above]
       //                 [1]:
       //                   name: "com.example..." [interface D from above]
  

Моя идея заключалась в том, чтобы каким-то образом, возможно, используя отражение Java, удалить второй элемент array ( interface D ) (если это возможно, то есть), прежде чем отправлять объект в Binder класс Vaadin.

Комментарии:

1. Привет, как вы нашли дубликат ключа для … почему бы не выбрать нужный?

2. Вы уверены, что наследование протоколов соответствует вашему описанию, потому что это не имеет смысла. Действительно ли B реализует / расширяет как C, так и D?

3. @GweltazNiquel Я не уверен, что понимаю вопрос. Ошибка возникает на более позднем этапе, когда объект с дубликатом ключа уже отправлен в Vaadin. Если я смогу удалить этот второй интерфейс из объекта, я думаю, тогда Vaadin не найдет это дублирующее свойство.

4. @JoakimDanielson Да, я уверен. Я уже поделился этим с авторами, надеясь, что второй (D) не нужен и что они обновят код. Но это маловероятно.

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

Ответ №1:

Вы не можете изменять информацию отражения в Java. Но на самом деле это ошибка в Vaadin, отправьте отчет об ошибке. В Java методы интерфейса с одинаковыми именами (и параметрами) не считаются дублированными — это один и тот же метод. Когда компилятор java сомневается, он выдает ошибку. Если ваша программа была скомпилирована, она верна, и Vaadin должен работать с любой правильной программой.