20.09.2016 / 12:06 | |
garfild63 Пользователь Сейчас: Offline
Имя: Антон Откуда: Новороссийск Регистрация: 26.08.2014
| aNNiMON, А импорты какие?
|
20.09.2016 / 15:04 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| garfild63, javax.microedition.io.PushRegistry
__________________
let live |
24.09.2016 / 15:02 | |
Alexandr Пользователь Сейчас: Offline
Имя: Александр Откуда: Днепр Регистрация: 01.07.2012
| Кто-то когда то видел графические ресурсы внутри классов? |
24.09.2016 / 15:15 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Alexandr, да.
__________________
знает толк |
24.09.2016 / 15:19 | |
Alexandr Пользователь Сейчас: Offline
Имя: Александр Откуда: Днепр Регистрация: 01.07.2012
| vl@volk, это же не правильно?
|
24.09.2016 / 16:01 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Alexandr, но прикольно
|
24.09.2016 / 17:51 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Alexandr, Ну, у меня, например эмо-текстура для отсутствующих файлов изображений создается прямо в коде. И стандартный шейдер захардкорен в менеджере шейдеров
|
24.09.2016 / 19:31 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Такая проблема. Есть класс, в нем метод, который могут переопределить наследники, и этот метод вызывается в конструкторе этого класса. Наследник вызывает super(..) в конструкторе, вызывается метод, который переопределен в этом наследнике, но параметры еще не проинициализированы.. Проблема:public class SomeParent {
SomeParent() {
loadData();
}
public void loadData() {
// Impl
}
}
public class SomeChild extends SomeParent {
Context mContext;
SomeChild(Context context) {
super();
mContext = context;// Сюда еще не дошли, а контекст уже нужен
}
@Override
public void loadData() {
showProgress(mContext); // #java.lang.NullPointerException
// Other impl
}
}
Был написан такой костыль - ParametersProvider. Открыть спойлер Закрыть спойлер public static final class ParametersProvider {
private final Map<String, Object> mParams;
public ParametersProvider(@NonNull String key, Object param) {
mParams = new HashMap<>(1);
mParams.put(key, param);
}
public ParametersProvider(@NonNull String[] keys, @NonNull Object[] params) {
mParams = new HashMap<>(1);
if (keys.length != params.length) throw new InvalidParameterException("keys and params has to be the same length");
for (int i = 0; i < keys.length; i++) {
mParams.put(keys[i], params[i]);
}
}
public ParametersProvider(@NonNull Map <String, Object> params) {
mParams = params;
}
public <T> T getParam(String param) {
//noinspection unchecked
return (T) mParams.get(param);
}
}
И использование:public class SomeParent {
private ParametersProvider mParametersProvider;
SomeParent(@Nullable ParametersProvider parametersProvider) {
mParametersProvider = parametersProvider;
loadData();
}
public ParametersProvider getParametersProvider() {
return mParametersProvider;
}
public void loadData() {
// Impl
}
}
public class SomeChild extends SomeParent {
SomeChild(Context context) {
super(new ParametersProvider("context", context));
}
@Override
public void loadData() {
showProgress(getParametersProvider().getParam("context"));
// Other impl
}
}
Есть еще идеи? Модифицировать `SomeParent` нельзя, т.к. для него вызов того метода в конструкторе обязательное, иначе костыли будут в другом месте (не забывать вызывать loadData после создания екземпляра класса Ну конкретно loadData может и можно, но это может быть другой метод, связанный с инициализацией) Изменено Naik (24.09 / 19:38) (всего 3 раза) |
24.09.2016 / 19:47 | |
aRiGaTo Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| Naik, как понимаю, в конструкторе базового класса помимо loadData() ещё что-то есть и просто не вызывать его — не вариант? А наследование вообще здесь имеет смысл? Может, стоит заменить композицией?
__________________
don't tread on me |