当前位置: 首页 > 面试题库 >

Java泛型-检索类型

叶煌
2023-03-14
问题内容
public Interface Foo<T extends Colors>{...}

有没有办法检索为Foo的实现而给出的T?

例如,

public Class FooImpl implements Foo<Green>{..}

将返回绿色。


问题答案:

与其他答案相反,您可以获得通用参数的类型。例如,将其添加到通用类内部的方法中,将获得该类的第一个通用参数(T在您的情况下):

ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
type.getActualTypeArguments()[0]

我在我编写的通用Hibernate DAO中使用了此技术,因此我可以获得持久化的实际类,因为Hibernate需要它。有用!



 类似资料:
  • 现在,当我在地图上迭代时…我能以某种方式获得每个Class1对象的类型(K,V)吗??

  • 通过使用泛型,我们可以在编译过程中检测到任何可能的错误。例如 当我们在Java1.5之前使用原始类型而不是泛型时,它需要显式转换。例如, 然而,对于泛型,会发生类型擦除。也就是说,类型信息在运行时丢失。如果,也就是说,JVM如何知道它在运行时检索的对象类型,是字符串对象还是person对象(上面由编译器生成的cast)。但这对泛型有效,这可能会导致运行时错误。 最后,Joshua Bloch在第1

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 我有一个关于Java仿制药的问题。假设我有以下方法: 我如何用通配符<解释上面的类型转换?扩展U>?使用它与只使用有什么区别?

  • 问题内容: 我正在编写一个程序,该程序将使用Java反射(即)根据用户的输入动态创建类实例。一个要求是我的程序创建的实例必须扩展一个我定义的特定类(称为)。我的问题是:对于存储此类类型,我应该使用有界的泛型还是无界的泛型?我发现一些Java书籍说Class是使用无界通配符泛型的良好实践之一,但是我想知道这是否适用于我程序中的情况。 如果您发现我的问题不够清楚或需要某些信息,请随时告诉我。 问题答案

  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符