Вниз  Java-программирование (1-ые посты)
- 20.09.2016 / 08:48
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
__________________
 let live
- 20.09.2016 / 12:06
garfild63
  Пользователь

garfild63 
Сейчас: Offline
aNNiMON, А импорты какие?
- 20.09.2016 / 15:04
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
garfild63, javax.microedition.io.PushRegistry
__________________
 let live
- 24.09.2016 / 15:02
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
Кто-то когда то видел графические ресурсы внутри классов? :)
- 24.09.2016 / 15:15
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
Alexandr, да.
__________________
 знает толк
- 24.09.2016 / 15:19
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
vl@volk, это же не правильно?
- 24.09.2016 / 16:01
Naik
  Пользователь

Naik 
Сейчас: Offline
Alexandr, но прикольно
- 24.09.2016 / 17:51
DominaN
  Пользователь

DominaN 
Сейчас: Offline
Alexandr, Ну, у меня, например эмо-текстура для отсутствующих файлов изображений создается прямо в коде. И стандартный шейдер захардкорен в менеджере шейдеров
- 24.09.2016 / 19:31
Naik
  Пользователь

Naik 
Сейчас: Offline
Такая проблема. Есть класс, в нем метод, который могут переопределить наследники, и этот метод вызывается в конструкторе этого класса. Наследник вызывает super(..) в конструкторе, вызывается метод, который переопределен в этом наследнике, но параметры еще не проинициализированы..

Проблема:
  1. public class SomeParent {
  2.  
  3.     SomeParent() {
  4.         loadData();
  5.     }
  6.  
  7.     public void loadData() {
  8.         // Impl
  9.     }
  10. }
  11.  
  12. public class SomeChild extends SomeParent {
  13.  
  14.     Context mContext;
  15.  
  16.     SomeChild(Context context) {
  17.         super();
  18.         mContext = context;// Сюда еще не дошли, а контекст уже нужен
  19.     }
  20.  
  21.     @Override
  22.     public void loadData() {
  23.         showProgress(mContext); // #java.lang.NullPointerException
  24.         // Other impl
  25.     }
  26. }

Был написан такой костыль - ParametersProvider.
Открыть спойлер

И использование:
  1. public class SomeParent {
  2.  
  3.     private ParametersProvider mParametersProvider;
  4.  
  5.     SomeParent(@Nullable ParametersProvider parametersProvider) {
  6.         mParametersProvider = parametersProvider;
  7.         loadData();
  8.     }
  9.  
  10.     public ParametersProvider getParametersProvider() {
  11.         return mParametersProvider;
  12.     }
  13.  
  14.     public void loadData() {
  15.         // Impl
  16.     }
  17. }
  18.  
  19. public class SomeChild extends SomeParent {
  20.  
  21.     SomeChild(Context context) {
  22.         super(new ParametersProvider("context", context));
  23.     }
  24.  
  25.     @Override
  26.     public void loadData() {
  27.         showProgress(getParametersProvider().getParam("context"));
  28.         // Other impl
  29.     }
  30. }

Есть еще идеи?

Модифицировать `SomeParent` нельзя, т.к. для него вызов того метода в конструкторе обязательное, иначе костыли будут в другом месте (не забывать вызывать loadData после создания екземпляра класса :gg: Ну конкретно loadData может и можно, но это может быть другой метод, связанный с инициализацией)

Изменено Naik (24.09 / 19:38) (всего 3 раза)
- 24.09.2016 / 19:47
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
Naik, как понимаю, в конструкторе базового класса помимо loadData() ещё что-то есть и просто не вызывать его — не вариант?
А наследование вообще здесь имеет смысл? Может, стоит заменить композицией?
__________________
 don't tread on me
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)