Делаю андроид приложение. На DataBinding описываю смену врагментов в рамках одной активити. Сделал класс Sequense, который управляет фрагментами и enum'ы, которые описывают флоу фрагментов в рамках каждой активити. Так как наследовать enum мы не можем, то сделал для них интерфейс Screen где определил некоторые методы. Выглядит это приблизительно так (проблему опишу в комментариях)
public class Sequence<T extends Enum<T> & Sequence.Screen> extends BaseObservableField<FragmentIntent> {
........
// Такой метод работает адекватно
public T nextScreen() {
Enum[] values = currentScreen.getValues();
.........
}
// Но если мы пытаемся кастить getValues к T, то получаем ошибку о несовместимости
// Enum[] и T[] хотя и в Screen и в Sequence тип T описан одинаково
// в строке T[] values = currentScreen.getValues();
public T prevScreen() {
T[] values = currentScreen.getValues();
.......
}
..................
public interface Screen<T extends Enum<T> & Sequence.Screen> {
T[] getValues();
..............
}
}
Можно ли как то сделать финт ушами с дженериками, чтобы мне не приходилось кастить каждый элемент массива к T, да и вообще это не очень то типобезопасно. Мне пока в голову не приходит ни одного решения.
пример класса, расширенного интерфейсом Screen
public enum CorpEditTemplateScreen implements Sequence.Screen {
....................
@Override
public CorpEditTemplateScreen[] getValues() {
return values();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо динамически добавлять информацию о пользователе (имя + email) в элемент менюИнформация должна быть отображена в две строки в одном...
Смотрел уроки по данной теме и там нашел вот этот код: