如何解释像 T, Query ,Class 这样的Javagenerics?
有Java API: Morphia
Morphia类定义如下方法:
T fromDBObject(Class entityClass, com.mongodb.DBObject dbObject)
有人可以解释 T and Class
含义吗? 该方法是否在集合中返回类型为T的类?
Inteface DataStore上的另一个API:
Query find(Class clazz, String property, V value) What Query means? Is the method returning an object of type Query that is then surrounded by collection `` and ``. This part is very confusing.
如果涉及尖括号( )
,它是否正确,它总是意味着涉及Java集合?
抱歉,我忘了在这个问题中标记一些内容作为代码,否则SO正在逃避改变问题的整个含义,因此@Vash和@fiver的2个答案都符合此编辑前的问题。
感谢您指出一些教程,但请提供您在Javagenerics方面的专业知识的特定答案,以帮助我更好地理解教程。
每当你看到<>时,这意味着泛型类 – 而不仅仅是集合。
类只是generics类的一个示例: http : //download.oracle.com/javase/6/docs/api/java/lang/Class.html
声明中的T表示任何类型的对象(T是类型)。
因此DBFromObject方法是一种generics方法,其中generics类型用T表示,它返回此generics类型T的对象并接受类型为Class
的参数。
generics不仅限于集合,但集合是理解为什么需要generics以及如何使用它们的好例子。
假设您创建一个新的List
对象,并且您知道它只包含特定类型的对象(例如, MyClass
对象)。 如果您可以在代码中以某种方式指定它并且可以自动检查,那么您可以确保不会将任何其他类型的对象插入此列表。 此外,当其他开发人员阅读您的代码时,他们很容易理解该列表仅包含“MyClass”对象。
generics让我们在代码中包含这些信息而不重写List
类。 实际上, List
function独立于它包含的对象类型。 因此,要创建自己的List
请编写以下代码:
List myList = new List ();
现在您可以想象可以指定多个generics类型的情况。 这种情况的一个很好的例子是Map
类。 您可以定义键和值的类型。 所以你在Map
类声明中看到
( Map
)。
除了Classes之外,generics也可以用在方法/构造函数声明中。 在你的例子中:
Query find(Class clazz, String property, V value)
有一种方法有两种通用类型T和V,你可以在调用方法时指定它们(或者它们可以由编译器推断)。 这里,声明中的
明确指出此方法function。
Query
和Class是Java类。
表示将使用一些通用参数T.
请阅读教程 ,这将使您了解generics。
public
是使用类文字作为运行时类型标记的一个很好的例子。 声明与页面底部附近的示例非常相似。 一个读数可能是,“给定一个名为entityClass
的类型的类文字和一个dbObject
,方法fromDBObject()
返回一个类型为T的对象。在这种情况下,符号T代表Class
对象所代表的类型。