Есть ли простой способ извлечь интерфейс из Java-класса, включая публичные методы суперклассов? - PullRequest
1 голос
/ 25 января 2011

Существует ли простой способ извлечь интерфейс из класса Java, включающий в себя публичные методы суперклассов.Класс, который я пытаюсь извлечь из интерфейса, имеет несколько уровней суперклассов, каждый из которых содержит множество методов.Мне не нужен интерфейс для каждого из этих родительских классов.

В настоящее время я использую InteliJ idea IDE.Он извлекает только открытые методы текущего класса при извлечении интерфейса.Если вы, ребята, можете сказать мне инструмент или простой способ извлечь интерфейс, это было бы очень полезно.

Ответы [ 2 ]

1 голос
/ 25 января 2011

Eclipse не предлагает методы суперкласса в рефакторинге «Extract Interface».И это правильно, потому что вы действительно не должны реализовывать интерфейс и реализовывать методы в суперклассе!

Вы хотите что-то вроде этого:

public interface InterfaceForB {
  void b();
  void a();
}

public class A {
  public void a(){}
}

public class B extends A implements InterfaceForB{
  public void b(){}
}

Да, он компилируется.Но это ужасный стиль, потому что он говорит, что B реализует интерфейс, что просто не соответствует действительности, потому что метод a() реализован в классе A.

Мой сильныйсовет: используйте рефакторинги, предлагаемые IntelliJ, извлекайте только методы для интерфейса, которые действительно реализованы реальным классом.Реализуйте B для данного примера, чтобы он реализовал все методы интерфейса:

public class B extends A implements InterfaceForB{
  public void b(){}
  public void a(){ super(); }
}

И теперь IntelliJ (и eclipse) могут извлекать интерфейс так, как вы этого хотите.

0 голосов
/ 25 января 2011

Eclipse имеет инструмент под названием «иерархия типов», который позволяет просматривать элементы только этого класса, структуру наследования (включая интерфейсы) этого класса (а также члены этого соответствующего класса / интерфейса), а также любые классы, которые расширяют / реализуют ваш класс.

Существуют также рефакторные инструменты для извлечения интерфейсов / суперклассов.

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