gpt4 book ai didi

java - 解析 Java 中的类型是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 22:41:22 25 4
gpt4 key购买 nike

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

以下是我尝试理解它们的一些用法示例:

来自 Field#getGenericType() :

If the type of the underlying field is a type variable or a parameterized type, it is created. Otherwise, it is resolved.

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

来自 TypeToken#resolveType() :

Resolves the given type against the type context represented by this type. For example:

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

最佳答案

关于你的第一个问题,考虑像这样的字段声明

public List<String> parameterizedField;

JVM 不维护表示 List<String> 类型的对象(就像一个 Class 对象一样)。因此它需要创建一个新的Type (在本例中为 ParameterizedType)表示该类型的对象并返回它(它也可能缓存它以备将来使用)。它会为

做同样的事情
public E genericField;

创建 TypeVariable在这种情况下是对象。

为了

public String regularTypeField;

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


在第二种情况下,类型标记 hack

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

在内部创建一个 Type代表List<String>由于类型删除,否则将无法直接检索。

resolveType调用检查 Type你给它并根据 TypeToken 解决它的类型参数。

在您的示例中,getGenericReturnType()调用将返回 Type表示在 List 中声明的类型变量类(class)。由于您已参数化 ListString , resolveType()将返回 String .它将您在类型标记中提供的类型参数绑定(bind)到方法或字段中使用的相应类型变量。

你用过吗

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

它会返回 E因为该类型变量与您在类型标记中绑定(bind)的变量无关。


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

关于java - 解析 Java 中的类型是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com