首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

[JAVA]如何获取泛型类型化名称

获取泛型类型化名称的方法有两种:

  1. 使用反射获取泛型类型信息:在Java中,泛型类型在运行时会被擦除,无法直接获取泛型类型的名称。但是可以通过反射来获取泛型类型的信息。可以通过以下步骤来获取泛型类型化名称:
  • 首先,获取包含泛型类型的类的Class对象。
  • 然后,通过Class对象的getGenericSuperclass()方法获取包含泛型类型的父类的Type对象。
  • 接着,通过ParameterizedType接口的getActualTypeArguments()方法获取泛型类型的实际类型参数。
  • 最后,通过Type对象的getTypeName()方法获取泛型类型的名称。

例如,获取一个List<String>的泛型类型名称的示例代码如下:

代码语言:java
复制

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.util.List;

public class Main {

代码语言:txt
复制
   public static void main(String[] args) {
代码语言:txt
复制
       Type genericType = Main.class.getGenericSuperclass();
代码语言:txt
复制
       if (genericType instanceof ParameterizedType) {
代码语言:txt
复制
           ParameterizedType parameterizedType = (ParameterizedType) genericType;
代码语言:txt
复制
           Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
代码语言:txt
复制
           if (actualTypeArguments.length > 0) {
代码语言:txt
复制
               Type actualType = actualTypeArguments[0];
代码语言:txt
复制
               System.out.println(actualType.getTypeName());
代码语言:txt
复制
           }
代码语言:txt
复制
       }
代码语言:txt
复制
   }

}

代码语言:txt
复制

输出结果为:java.lang.String

  1. 使用TypeToken获取泛型类型信息:TypeToken是Gson库中提供的一个类,可以用于获取泛型类型的信息。可以通过以下步骤来获取泛型类型化名称:
  • 首先,创建一个继承自TypeToken的匿名内部类,并指定泛型类型。
  • 然后,通过getType()方法获取泛型类型的Type对象。
  • 最后,通过Type对象的getTypeName()方法获取泛型类型的名称。

例如,获取一个List<String>的泛型类型名称的示例代码如下:

代码语言:java
复制

import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;

import java.util.List;

public class Main {

代码语言:txt
复制
   public static void main(String[] args) {
代码语言:txt
复制
       Type type = new TypeToken<List<String>>() {}.getType();
代码语言:txt
复制
       System.out.println(type.getTypeName());
代码语言:txt
复制
   }

}

代码语言:txt
复制

输出结果为:java.util.List<java.lang.String>

以上是获取泛型类型化名称的两种方法。这些方法可以帮助开发人员在需要获取泛型类型信息的场景中进行处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何通过Java反射获取类型信息

前言 关于Java,很多人都有一个误解,认为Java代码在编译时会擦除类型,从而在运行时导致没法访问其类型,这其实并不完全正确,因为有一部分信息是可以在运行时动态获取的,这部分信息基本能够满足我们日常开发中的大多数场景...的使用场景 在讨论如何用反射获取类型之前,我们先来回顾下,在Java里面什么时候会使用,了解这个问题之后,我们才能继续思考如何用反射获取类型。...在Java里面可以通过反射获取信息的场景有三个,分别是: (1)成员变量的 (2)方法参数的 (3)方法返回值的 注意,通过对象本身也是没法获取的。...:"+realType); } } } } 总结 本文主要介绍了如何使用反射来获取部分参数的类型信息,并介绍了那些场景不能使用反射获取类型信息...,通过反射获取参数的类型信息其实是非常有用的一个功能,比如在一些json工具的开源包里面,可以对Java里面泛的各种List,List等类型做正确识别,其实就是利用反射的这个功能,从而让解析代码具有更强的通用

8.9K21

java typereference_Java | Jackson TypeReference获取类型信息「建议收藏」

前言 Jackson是一个比较流行的Json序列和反序列框架。本文以Jackson为例介绍TypeReference实现涉及的反序列,及TypeReference的实现原理。...对于获取类型信息的场景,TypeReference是一个可以参考的通用解决方案。 实例 Jackson ObjectMapper的readValue可以将Json字符串反序列化为Java对象。...抽象类TypeReference用于通过子类获取完整的类型信息。...实现原理 上例中new TypeReference>(){}子类的实例,TypeReference源码部分比较简单,主要逻辑是,通过getClass().getGenericSuperclass()获取父类中的参数类型...Class的genericInfo: 总结Jackson ObjectMapper 提供了TypeReference支持对对象的反序列; 对于获取类型信息的场景,TypeReference是一个可以参考的通用解决方案

2K10

Java类型擦除问题

Java类型擦除问题 以前就了解过Java的实现是不完整的,最近在做一些代码重构的时候遇到一些Java类型擦除的问题,简单的来说,Java中所指定的类型在编译时会将其去除,因此List<...因此java只能做到编译期检查的功能,运行期间就不能保证类型安全。...json序列后的字符串,并提供了方法将string spec 反序列化成相应的类型,比较理想的方式是在反序列的方法中能够获取到参数类型 T 的实际类型,理论上运行时Spec类型是确定了,因此T也应该是确定的...按照以下尝试 通过((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()获取类型,经过测试是获取不到的...第二种是创建spec的子类中使用这个方法就可以获取类型 @Data public abstract static class AbstractSpec { public String

99920

JAVA类型擦除

的本质是参数类型,这种参数类型可以用在类、接口和方法的创建中。...是在JAVA 1.5版本中才引入的,它能和以前的版本兼容的原因是信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,即类型擦除。...// 返回值类型定义前的是必须的,用来声明一个类型持有者名称,然后就可以把T当作一个类型代表来声明成员、参数和返回值类型。...通配符 如果在某些场景下我们不关注(或者不那么关注)对象的类型参数,可以使用通配符。...在Java SE 1.5之前,没有的情况的下,通过对类型Object的引用来实现参数的“任意”,“任意”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的

1.7K40

【说站】java类型的调用和实例

java类型的调用和实例 1、调用类似于普通方法调用,但你不是把参数传递给方法,而是把类型参数传递给Box类本身。...Box integerBox; 类型参数和类型变量术语: 许多开发人员可以混淆地使用术语“类型参数”和“类型变量”,但这两个术语并不相同。编码时,提供类型参数以创建参数类型。...2、调用实例类,像往常一样使用new关键字,但是在类名和括号之间放置。 通常称为参数类型(相当于方法的实际参数)。...Box integerBox = new Box(); 以上就是java类型的调用和实例,希望对大家有所帮助。...本教程操作环境:windows7系统、java10版,DELL G3电脑。 收藏 | 0点赞 | 0打赏

99830

揭开Java 类型擦除神秘面纱

还有一种较为准确的说法就是为了参数类型,或者说可以将类型当作参数传递给一个类或者是方法。 那么,如何解释类型参数呢?...提高了程序代码的可读性,不必要等到运行的时候才去强制转换,在定义或者实例阶段,因为 Cache 这个类型的效果,程序员能够一目了然猜测出代码要操作的数据类型。...但是,在现实编码中,确实有这样的需求,希望能够处理某一范围内的数据类型,比如某个类和它的子类,对此 Java 引入了通配符这个概念。 所以,通配符的出现是为了指定中的类型范围。...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因。

1.1K10

揭开Java 类型擦除神秘面纱

还有一种较为准确的说法就是为了参数类型,或者说可以将类型当作参数传递给一个类或者是方法。 那么,如何解释类型参数呢?...提高了程序代码的可读性,不必要等到运行的时候才去强制转换,在定义或者实例阶段,因为 Cache 这个类型的效果,程序员能够一目了然猜测出代码要操作的数据类型。...但是,在现实编码中,确实有这样的需求,希望能够处理某一范围内的数据类型,比如某个类和它的子类,对此 Java 引入了通配符这个概念。 所以,通配符的出现是为了指定中的类型范围。...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因。

1.3K30

Java基础篇:类型擦除

一、什么是的本质是 参数类型,也就是说 将所操作的数据类型 指定为一个参数,在不创建新类的情况下,通过参数来指定所要操作的具体类型(类似于方法中的变量参数,此时类型也定义成参数形式),也就是说...二、的好处: 没有的情况的下,通过对类型Object的引用来实现参数的“任意”,“任意”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。...三、Java类库中的有那些?的用途? (1)类:最常见的用途就是容器类,通过可以完成对一组类的操作对外开放相同的接口。...五、Java的实现方法–类型擦除: Java的实现是靠类型擦除技术实现的,类型擦除是在编译期完成的,也就是在编译期,编译器会将类型参数都擦除成它指定的原始限定类型,如果没有指定的原始限定类型则擦除为...object类型,之后在获取的时候再强制类型转换为对应的类型,因此生成的Java字节码中是不包含中的类型信息的,即运行期间并没有的任何信息。

69320

揭开Java 类型擦除神秘面纱

还有一种较为准确的说法就是为了参数类型,或者说可以将类型当作参数传递给一个类或者是方法。 那么,如何解释类型参数呢?...提高了程序代码的可读性,不必要等到运行的时候才去强制转换,在定义或者实例阶段,因为 Cache 这个类型的效果,程序员能够一目了然猜测出代码要操作的数据类型。...但是,在现实编码中,确实有这样的需求,希望能够处理某一范围内的数据类型,比如某个类和它的子类,对此 Java 引入了通配符这个概念。 所以,通配符的出现是为了指定中的类型范围。...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因。

95140

Java入门(16)-- 枚举类型

在没有出现之前,Java也提供了对Object的引用“任意”操作,这种“任意”操作就是对Object引用进行向下转型及向上转型操作,但某些强制类型转换的错误也许不会被编译器捕捉,而在运行后出现异常...在JDK1.5版本以后,提出了机制。 语法:类名 其中,T代表一个类型名称。...定义类时声明多个类型 在定义类时,可以声明多个类型,语法: MutiOverClass MutiOverClass : 名称 其中,T1和T2为可能被定义的类型。...限制可用类型 默认可用使用任何类型来实例一个类对象,但Java中也对类实例的类型作了限制。...> l3 = new LinkedList(); System.out.println(l2.get(0)); 注:使用通配符声明的名称实例对象不能对其加入新的信息,智能获取或删除。

74630

Java,你了解类型擦除吗?

还有一种较为准确的说法就是为了参数类型,或者说可以将类型当作参数传递给一个类或者是方法。 那么,如何解释类型参数呢?...提高了程序代码的可读性,不必要等到运行的时候才去强制转换,在定义或者实例阶段,因为 Cache 这个类型的效果,程序员能够一目了然猜测出代码要操作的数据类型。...但是,在现实编码中,确实有这样的需求,希望能够处理某一范围内的数据类型,比如某个类和它的子类,对此 Java 引入了通配符这个概念。 所以,通配符的出现是为了指定中的类型范围。...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因。

2.2K20

Java类型擦除类型擦除参考资料

本文首发于个人网站:Java阿杜 类型擦除 学过C++模板的,在使用Java的时候,会感觉到有点不疑问,例如:(1)无法定义一个数组、无法调用参数对象中对应的方法(当然,通过extends...Java中的有这些问题,是它的实现机制决定的,即“类型擦除”。...类型擦除的定义:编译通过后,准备进入JVM运行时,就不再有类型参数的概念,换句话说:每定义一个类型,JVM会自动提供一个对应的原生类; public class Holder4 {...在Java诞生10年后,才想实现类似于C++模板的概念,即Java的类库是Java生态中非常宝贵的财富,必须保证向后兼容(即现有的代码和类文件依旧合法)和迁移兼容(的代码和非的代码可互相调用...Java依赖编译器实现,只存在于编译期,JVM中没有的概念;那么,编译器做了什么工作呢?

59020

【进阶之路】Java类型擦除式

---- highlight: a11y-light Java选择的类型叫做类型擦除式。什么是类型擦除式呢?...但是Java的设计人员并没有这么做,而是选择了把已有的不支持类型,不添加任何平行于已有类型版。...将之前的代码反序列之后,我们能够看出强制转化的类型消失了,Java代码变回了出现之前的写法。...因为类型可擦除,我们无法直接从List中取得参数类型T,所以只能从额外的参数中传递一个数组的类型进去进行转换。...获取参数类型的数组,可能有多个 Class c = (Class) p.getActualTypeArguments()[0]; System.out.println(c); //class java.lang.String

1.1K40

转:Java ,你了解类型擦除吗?

转载自 frank909 的文章 《Java ,你了解类型擦除吗?》 ---- ,一个孤独的守门者。 大家可能会有疑问,我为什么叫做是一个守门者。...但还有一种较为准确的说法就是为了参数类型,或者说可以将类型当作参数传递给一个类或者是方法。 那么,如何解释类型参数呢?...提高了程序代码的可读性,不必要等到运行的时候才去强制转换,在定义或者实例阶段,因为 Cache 这个类型的效果,程序员能够一目了然猜测出代码要操作的数据类型。...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因。

1.4K10
领券