@GreenBanan

HashTable для хранения полей класса. Допустимо?

Однажды я увидел нечто такое:
class A {
 private String a;
 HashTable<String, Object> parameters;
 ...
};


В связи с этим вопрос. Допустимо ли хранение параметров в таком виде.
1. Возникают вопросы с регистрами ключей.
2. Нельзя стандартизировать класс. Для работы с параметрами используется: a.setParameter(String name, Object value)
3. Обязательные параметры? (Гарантированно существующие)
4. Необязательные параметры?
5. Допустимые параметры?
6. Не сериализуемые параметры?
7. Типы данных параметров?

Может я не понимаю чего-то.
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Armitage89
Технически, если стоит задача по сливу значений, то можно было бы воспользоваться и HashTable. В Object так-же можно подвязать любой объект. Но не пойти ли путем рефлексии, считав с самого класса доступные поля, и в дальнейшем просто достав из объекта необходимые значения?(мысли вслух)
Ответ написан
Комментировать
@bromzh
Drugs-driven development
Ну это допустимо там, где нужно использовать именно такую структуру. Например, я в таком классе хранил сообщения-команды: в строковом поле - название команды, в мапе - её аргументы. Имена аргументов, их тип и количество для всех команд могут быть разными (и вложенными на несколько уровней), поэтому просто поля не подходят. При этом, вся эта штука легко (де)сериализуется. Да, если нужен нестандартный маппинг в/из JSON (или любой другой формат), придётся потрудится, но у меня такой проблемы не возникало.

Так что просто используй там, где это реально нужно.

PS ещё можно использовать груви и, например, Expando. Плюсы в том, что там будут настоящие поля, с доступом через точку и т.д.
def foo = new Expando(a: 1, b: "2", c: [3, 4])
foo.d = "value"
foo.e = "another value"
println foo

Expando bar = [f: 5, g: "spot"]
bar.e = foo
println bar

{a=1, b=2, c=[3, 4], d=value, e=another value}
{f=5, g=spot, e={a=1, b=2, c=[3, 4], d=value, e=another value}}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы