- 1
- 2
- 3
- 4
- 5
- 6
ObservableStorage.ConfigurationTuple<Integer, ObservableStorage.ConfigurationTuple<Foo, ObservableStorage.ConfigurationTuple<Foo, ObservableStorage.ConfigurationEnd>>> build = RemoteObservableStorage
.configurationBuilder()
.use("foo").as(Foo.class)
.use("foo1").as(Foo.class)
.use("ids").as(Integer.class)
.build();
где-то так :)
Чего не сделаешь ради типобезопасности.
И, да, я понимаю, что джава не лучший способ делать такие вещи :)
Ага, в крестах его можно было бы индексировать: configuration.get<2>().
Чтобы можно было написать просто
Да и вообще круто их было бы именовать и потом по именам получать, но как такое сделать, идей нет :(
Причем именовать не стрингами, а чем-то более безопасным.
Именами классов, больше то нечем ;)
Набор полей - фиксированный.
Типы - проверяются.
Флюент - при желании вполне реализуем.
Пока вижу только один плюс - заставляет заполнить все поля.
P.S. Ааа, чтобы перехватить установку значений и куда-то их передать...
Теперь "поля" разных "структур" нельзя смешивать:http://ideone.com/eKPhPl
с клёвым пляжем и опасными аборигенами
PS Лично я не одобряю такие, имплицитные типы - ладно, но методы - уже перебор
.useAs("foo", Foo.class) ?
И да, фаз изначально было больше.
И вообще, я не тру, ибо считаю с единицы :(
У тебя не получится вызвать build() без вызова as(), и не получится вызвать as() без вызова use(), так что этот вопрос решен
А вот вопрос того, что в списке типов важен порядок - реальная проблемка, если у кого есть решения буду рад выслушать.
PS тут IRC канала нет?