当前位置: 首页 > 知识库问答 >
问题:

在Java中解析类型是什么意思?

司徒博容
2023-03-14

在Java中解析类型是什么意思?

下面是一些用法示例,我试图理解它们:

字段#getGenericType()

如果基础字段的类型是类型变量或参数化类型,则创建它。否则,它被解决。

  • 需要创建类型变量或参数化类型才能使这种形式的反射工作,因为它们无法加载,因为它们在运行时并不真正“存在”
  • 所以,如果某个东西在运行时存在,它可以被“解决”?通过类加载器

类型令牌#resolveType()

根据此类型所表示的类型上下文解析给定的类型。例如:

new TypeToken<List<String>>() {}.resolveType(
    List.class.getMethod("get", int.class).getGenericReturnType())
=> String.class
  • 这个我一点也不明白。不确定这段代码在做什么

共有1个答案

何烨华
2023-03-14

关于你的第一个问题,考虑一个现场声明,比如

public List<String> parameterizedField;

JVM 不维护表示 List 类型的对象

public E genericField;

在本例中,创建一个<code>类型变量

public String regularTypeField;

但是,类型是已知的,JVM为String维护一个Class对象,因此只需要返回它。

在第二种情况下,类型令牌黑客

new TypeToken<List<String>>() {}

在内部创建表示列表的类型

调用检查您提供的Type,并根据TypeToken的type参数对其进行解析。

在您的示例中,调用的< code > getGenericReturnType()将返回一个< code>Type,表示在< code>List类中声明的类型变量。由于已经用< code>String参数化了< code>List,因此< code>resolveType()将返回< code>String。它将您在类型标记中提供的类型参数绑定到方法或字段中使用的相应类型变量。

您是否使用过

new TypeToken<List<String>>() {}.
    resolveType(Iterator.class.getMethod("next").getGenericReturnType())

它将返回<code>E

resolved在这两种情况下的用法是不同的。

 类似资料:
  • 问题内容: 我的问题如上所述。抱歉,可能是重复的,但最后找不到一个示例。 为什么不只使用它作为参数? 问题答案: 是可参数化的类,因此可以使用where 类型的语法。通过编写,您可以声明一个可以是任何类型的对象(是通配符)。该类型是包含类元信息的类型。 通过指定特定类型来引用泛型类型始终是一种好习惯,这是通过尊重您的习惯(您知道可参数化的)来使用的,但并不限制参数具有特定类型。 有关泛型和通配符的

  • 问题内容: 这是什么意思,仅表示未指定类型的对象列表吗? 搜寻该字符串不会返回任何有用的信息(: 问题答案: 您需要获取更多信息的关键字是通配符

  • 问题内容: 在Java 8中,具有“方法参考”功能。一种是“引用特定类型的任意对象的实例方法” http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html#type 有人可以解释在这种情况下“特定类型的任意对象”是什么意思吗? 问题答案: 它是对某种类型的实例方法的引用。在此示例中,是的方法。程序知道可以在的实例

  • 问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如

  • 我发现这段代码是为了在SO post中找到重复的代码。但我不明白这行是什么意思

  • 问题内容: 我正在学习上面的代码,它告诉我什么是自省者和什么是stopClass。但是我不明白这是什么意思?`for (PropertyDescriptor prop props) for(i=0;i<100;i++)` 有人可以帮忙进一步解释吗?谢谢! 问题答案: 这就是 Java 5中引入的每种循环语法。