интерфейс для метода generi c после реализации метода - PullRequest
0 голосов
/ 08 мая 2020

Текущая ситуация:

  • У меня есть 2 модуля maven
  • модуль 1 в целом с интерфейсами
  • модуль 2 с реализациями и имеет конкретный зависимость другого модуля maven module3 (внешний модуль проекта)
  • модуль 2 имеет зависимость от module1
  • модуль 1 не может иметь зависимости от module3
  • В модуле 2 I есть метод, который реализует интерфейс, унаследованный от артефакта maven, который я не могу изменить
  • Мне нужно предоставить интерфейс с подписью метода в модуле1, который я реализовал уже реализованным в модуле2, очевидно, чтобы иметь другая конкретная реализация для этой спецификации c сигнатура метода.

сигнатура метода, реализованная в модуле 2, выглядит так:

 Class MyClass{
   public <T extends Enum<T> & Interface1> Interface2 myMethod(param1, param2...){.....}
}

Интерфейс 1 и Интерфейс 2 являются частью модуля 3 (тот, который я не может быть изменен, и module1 не может иметь его в качестве зависимости)

Вопрос: как я могу создать интерфейс в модуле1, который будет реализован модулем формы MyClass 2 с необходимой сигнатурой метода?

Что-то вроде:

Module1:

interface MyInterface{
 <T extends Enum<T> & -->What I should put here<--- > -->What I should put here<--- myMethod(param1, param2...){.....}
}


 class MyClass implements MyInterface{
   public <T extends Enum<T> & Interface1> Interface2 myMethod(param1, param2...){.....}
}

     class MyClass2 implements MyInterface{
   public <T extends Enum<T> & -->Different interface needed here than Interface1<-- > -->Different interface needed here than Interface2<-- myMethod(param1, param2...){.....}
}

Есть идеи? как я могу преодолеть интерфейсы, унаследованные от module3 (которые я не могу изменить и не могу иметь его как зависимость в модуле1, только в модуле2 я могу иметь его как зависимость) В основном, чтобы предоставить более общее определение сигнатуры метода интерфейса c в модуле1 чтобы удовлетворить сигнатуру метода в модуле2?

В настоящее время говорится: оба метода: метод интерфейса и метод, реализованный в классе, имеют одинаковое стирание, но ни один из них не отменяет другой.

1 Ответ

0 голосов
/ 08 мая 2020

Используйте вывод:

 <A, B, T extends Enum<T> & A> B myMethod(param1, param2...){.....}

И позвольте сайту звонков выяснить это.


ИМХО, когда все становится таким корявым, дженерики переоцениваются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...