泛型或对象铸造?

泛型或对象铸造?

问题描述:

考虑这种情况: 我的目标是有一个小的元数据框架。我有一个拥有成对数据的Metadata商店。泛型或对象铸造?

每一对数据由一个键(字符串类型)和一个值(类型MetaValue)组成。

MetaValue类将包含可以调用的一段数据(不只是字符串)。它必须主要是高性能的,因为它将用于多人游戏的服务器实现。

我是否应该将数据(在MetaValue类中)作为Object类型的对象保存,然后将其转换为我需要的任何内容(如int,boolean,String,...)还是应该使用返回的泛型原始数据类型表单中的数据?

我想知道哪些是最高性能的。这些数据不会是复杂的自制课程的对象。它纯粹是为了元数据。例如:怪物的HP。武器的攻击率,...

+0

你的MetaData对象是什么样的?它是否存储在表格或地图中? – 2014-09-30 18:35:22

+5

从'Object'的投射基本上是Java泛型如何在引擎下工作,所以我不希望有显着的性能差异。 – Sneftel 2014-09-30 18:36:01

+1

我个人建议您完全重新考虑这种方法。大多数游戏开发者不会将怪物的HP“元数据”称为怪物 - 这是怪物对象的重要组成部分。更多的面向对象的方法可能会更简单,并且可能会更快。 – StriplingWarrior 2014-09-30 18:44:16

如果数据的值可以是任何类型,那么泛型中就没有值,这会将数据类型限制为特定的类或类层次结构。使用Object作为数据类型,并根据需要转换从元数据对象中提取的数据。

注意您提取的是您期望的数据类型,或者可能导致ClassCastException

这不会比使用泛型更高性能,因为使用泛型时,无论如何都会使用类似于Integer hp = metadata.get("monsterHP");的方法对泛型进行隐式转换。