Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование переопределенных методов интерфейса в конструкторе. / 7 сообщений из 7, страница 1 из 1
19.02.2013, 15:57:03
    #38157573
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование переопределенных методов интерфейса в конструкторе.
Почитал здесь пример и простетировал.
А всегда ли это чревато..?

Например, я создал интерфейс:

Код: java
1.
2.
3.
4.
public interface CommonUI {
    public void createMainLayout();
    public void createMainMenuBar();
}



Далее создал другой класс,
имплементировал туда этот вышеуказанный интерфейс,
явно указал конструктор,
в конструктор вставил один или оба метода интерфейса.

IDE выдает предупреждение - Overridable method call in constructor.
Чем заменить если хочется использовать методы интерфейса при вызове класса?
...
Рейтинг: 0 / 0
19.02.2013, 15:59:50
    #38157576
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование переопределенных методов интерфейса в конструкторе.
Nixic,
Это плохая практика в любом случае, НО если это не либа а ваш и только ваш код и вы имеете полный контроль над наследниками - то в принципе можно так делать, но обызательно задокументируйте. Еще лучший вариант вынести взовы переопределенных методов в метод init(), который должен вызываться после конструктора
...
Рейтинг: 0 / 0
19.02.2013, 16:06:37
    #38157581
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование переопределенных методов интерфейса в конструкторе.
Добрый день, Nixic!

> А всегда ли это чревато..?

Если метод или класс не final - то да.

> Например, я создал интерфейс:

Да он здесь не при чём.

> Чем заменить если хочется использовать методы интерфейса при вызове класса?

Грабли вот где:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class C1 {
  public C1() {
    m1();
  }
  public void m1() {
  }
}

public class C2 extends C1 {
  private final C1 parent;
  public C2() {
    parent = new C1();
  }
  public void m1() {
    parent.m1();
  }
}



И вот при создании C2 возникает вдруг NPE :)

Если хочется иметь вероятность грабли- используй. Но тебя предупреждают.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.02.2013, 16:08:38
    #38157590
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование переопределенных методов интерфейса в конструкторе.
Nixic,
если хочется использовать методы интерфейса при вызове класса?
надо перехотеть
...
Рейтинг: 0 / 0
19.02.2013, 16:13:17
    #38157597
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование переопределенных методов интерфейса в конструкторе.
Nixic,

Ну, так доведи свой пример до ума:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class MyPanelGui extends AbstractPanelGui implement CommonUI{
  private Parameter param;
  public MyPanelGui(Parameter param){
         this.param = param;
  }   
  public void createMainLayout(){
    if(param.equals(HORZIONTAL)){
           createHorizonalLayout();
    }
  }
}


Работать будет?
...
Рейтинг: 0 / 0
19.02.2013, 16:15:29
    #38157601
vimba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование переопределенных методов интерфейса в конструкторе.
NixicIDE выдает предупреждение - Overridable method call in constructor.
Чем заменить если хочется использовать методы интерфейса при вызове класса?
Не чем не нужно заменять, просто добавь модификатор final на имплементацию методов интерфейса, тогда наследник не сможет изменить их реализацию.
...
Рейтинг: 0 / 0
20.02.2013, 10:31:30
    #38158496
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование переопределенных методов интерфейса в конструкторе.
Спасибо большое, принял на вооружение :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование переопределенных методов интерфейса в конструкторе. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]