java - 如何解释 <T> T 、 <T,V> Query<T> 、 Class<T> 等 Java 泛型?

标签 java generics

有 Java API:Morphia

Morphia 类定义方法如下:

<T> T fromDBObject(Class<T> entityClass, com.mongodb.DBObject dbObject)

谁能解释一下<T> T and Class<T>方法?该方法是否返回集合中类型 T 的类?

Interface DataStore 上的另一个 API:

<T,V> Query<T> find(Class<T> clazz, String property, V value) 

What <T,V> Query<T> means? Is the method returning an object of type Query that is then surrounded by collection `<T,V>` and `<T>`. This part is very confusing.

whenever 尖括号 (< > ) 是否正确?是涉及,它总是意味着涉及Java集合?

抱歉,我忘记将这个问题中的一些内容标记为代码,否则 SO 正在逃避改变问题的全部含义,因此@Vash 和@fiver 的 2 个答案与此编辑之前的问题一致。

感谢您指出一些教程,但请提供您在 Java 泛型方面的专业知识对问题的具体回答,这将帮助我更好地理解教程。

最佳答案

泛型不仅限于集合,而且集合是理解为什么需要泛型以及如何使用它们的好例子。

假设您创建一个新的 List对象,你知道它只会包含特定类型的对象(例如,MyClass 对象)。如果您可以以某种方式在您的代码中指定它并且可以自动检查它,那么您可以确保不会将其他类型的对象插入到该列表中。此外,当其他开发人员阅读您的代码时,他们很容易理解该列表仅包含“MyClass”对象。

泛型让我们无需重写 List 就可以在代码中包含此类信息类(class)。事实上,List功能独立于它包含的对象类型。所以要创建你自己的 List你写这段代码:

         List<MyClass> myList = new List<MyClass>();

现在您可以想象可以指定多个泛型类型的情况。这种情况的一个很好的例子是 Map类(class)。您可以定义键和值的类型。所以你看到<K,V>Map类声明(Map<K,V>)。

除了类之外,泛型也可以用在方法/构造函数声明中。在你的例子中:

         <T,V> Query<T> find(Class<T> clazz, String property, V value) 

有一个方法有两个泛型类型 T 和 V,您可以在调用该方法时指定它们(或者它们可以由编译器推断)。在这里,<T,V>在声明中明确指出此方法的功能。

关于java - 如何解释 <T> T 、 <T,V> Query<T> 、 Class<T> 等 Java 泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503942/

相关文章:

java - 使用 Bazel 在 Android 中实现 Crashylytics 时生成文件错误

c# - 如何实现一个类的泛型和非泛型版本?

Java Jtable 列排序与日期无法正常工作

java - XML RPC 服务器(PHP、Drupal)与客户端(Java)在长整数上不兼容

java - 通用接口(interface)实现不起作用

Java 泛型 : Wildcard capture misunderstanding

C#:转换为具有基类型的泛型接口(interface)

c# - 无法将类型 System.Collections.Generic.IEnumerable<T> 隐式转换为 System.Collections.Generic.List<B>

java - dbutils 库中的 BeanListHandler 无法从数据库结果集中创建 java 类对象

java - 通过java列出weblogic中的所有用户