2014-09-30 2 views
0

Рассмотрите этот сценарий: Моя цель - создать небольшую структуру метаданных. У меня есть хранилище метаданных, в котором хранятся пары данных.Генерирование или литье объектов?

Каждая пара данных состоит из ключа (тип String) и значения (тип MetaValue).

Класс MetaValue будет содержать только одну часть данных (а не только строку), с которой можно работать. Он должен быть главным образом выполненным, потому что он будет использоваться в серверной реализации многопользовательской игры.

Должен ли я хранить данные (в классе MetaValue) как объект типа Object, а затем применять его ко всему, что мне нужно (например, int, boolean, String, ...), или мне нужно использовать генерические файлы, которые возвращаются данные в форме исходного типа данных?

Я хочу знать, какая из них самая совершенная. Данные не будут объектом сложного самодельного класса. Это чисто для метаданных. Например: HP монстра. Уровень атаки оружия, ...

+0

Как выглядит ваш объект MetaData? Сохраняется ли она в таблице или карте? –

+5

Кастинг в и из 'Object' - это в основном то, как Java-дженерики работают под капотом, поэтому я не ожидал существенной разницы в производительности. – Sneftel

+1

Я лично рекомендую полностью переосмыслить этот подход. Большинство разработчиков игр не назвали метаданные HP «монстра» - это важная часть объекта Monster. Более объектно-ориентированный подход, вероятно, будет намного проще, и может быть и быстрее. – StriplingWarrior

ответ

2

Если значение данных может быть любого типа, то в generics нет значения, которое ограничивало бы тип данных определенным классом или иерархией классов. Используйте Object в качестве типа данных и при необходимости произведите данные, извлекаемые из объекта метаданных.

Позаботьтесь о том, чтобы вы извлекли тип данных, который вы ожидаете, или может возникнуть ClassCastException.

Это не более и не менее эффективный, чем использование дженериков, потому что при использовании дженериков в любом случае будет использоваться неявный приведение к родовому типу с таким методом, как Integer hp = metadata.get("monsterHP");.

Смежные вопросы