如何解释像 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类。 实际上, Listfunction独立于它包含的对象类型。 因此,要创建自己的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 T fromDBObject(Class entityClass, com.mongodb.DBObject dbObject)是使用类文字作为运行时类型标记的一个很好的例子。 声明与页面底部附近的示例非常相似。 一个读数可能是,“给定一个名为entityClass的类型的类文字和一个dbObject ,方法fromDBObject()返回一个类型为T的对象。在这种情况下,符号T代表Class对象所代表的类型。