Рассмотрим следующий пример:
public class Sandbox {
public interface Listener<T extends JComponent> {
public void onEvent(T event);
}
public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
}
}
Это происходит со следующей ошибкой
/media/PQ-WDFILES/programming/Sandbox/src/Sandbox.java:20: Sandbox.Listener cannot be inherited with different arguments: <javax.swing.JPanel> and <javax.swing.JLabel>
public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
^
1 error
Почему, хотя? В сгенерированных методах нет совпадений. На самом деле, это по сути означает
public interface AnotherInterface {
public void onEvent(JPanel event);
public void onEvent(JLabel event);
}
Никаких совпадений. Так почему же это не получается?
В случае, если вам интересно, что я делаю, и у меня есть лучшее решение: у меня есть куча событий и интерфейс слушателя, который почти в точности похож на класс Listener
выше. Я хочу создать адаптер и интерфейс адаптера, и для этого мне нужно расширить все интерфейсы слушателя определенным событием. Это возможно? Есть ли лучший способ сделать это?