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

如何访问泛型的Class对象?

在Java中,泛型的Class对象是通过使用带有类型参数的类字面量来创建的。要访问泛型的Class对象,您需要使用以下语法:

代码语言:java
复制
Class<T> clazz = T.class;

其中,T是泛型类型参数,clazz是一个Class对象,表示类型为T的类。例如,如果您有一个泛型类MyClass,您可以通过以下方式访问泛型的Class对象:

代码语言:java
复制
Class<MyClass> clazz = MyClass.class;

在泛型的Class对象中,您可以使用getGenericInterfaces()方法获取泛型接口,使用getGenericSuperclass()方法获取泛型父类。这些方法返回的是Type对象,您可以通过强制类型转换将其转换为ParameterizedType对象,然后获取泛型类型参数的实际类型。例如,如果您有一个泛型类MyClass,它实现了一个泛型接口MyInterface,您可以通过以下方式获取泛型类型参数的实际类型:

代码语言:java
复制
Class<MyClass> clazz = MyClass.class;
Type[] interfaces = clazz.getGenericInterfaces();
ParameterizedType parameterizedType = (ParameterizedType) interfaces[0];
Type[] typeArguments = parameterizedType.getActualTypeArguments();
Class<?> actualType = (Class<?>) typeArguments[0];

在这个例子中,actualType变量将包含MyInterface的泛型类型参数的实际类型。

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

相关·内容

Java详解:和Class使用。类,方法详细使用实例

唯一不同是,要在函数定义中在返回值前加上标识; 5、其它用法:Class类传递及数组  (1)、使用Class传递Class对象 有时,我们会遇到一个情况,比如,我们在使用... object来传递类class对象,即我们上面提到SuccessModel.class。...这是因为Class也是一,它是传来用来装载类class对象,它定义如下:    [java]     view plain     copy    public final class...Class implements Serializable {       …………   }    通过Class来加载Class对象问题就讲完了,下面来看看数组使用方法吧。...若是操作正常执行,则就不在意这个属性值。  3,我们操作最终目的对象。对应属性obj。   牛逼地方就是在这个地方。

3.2K50

打个赌你可能不知道如何获取JavaClass对象

Java中有着很重要作用,它能够让我们数据容器类型安全,避免发生转换异常。...不过Java中也为人诟病,它会在编译中被全部转换成Object对象,也就是擦除,这造成了诸多不便,除非你能获取一个实例,否则我们无法直接获取实际类型。...大致原理 虽然会在字节码编译过程中被擦除,但是Class对象会通过java.lang.reflect.Type记录其实现接口和继承父类信息。...Type实现类型 通过上图可以知道Type有四种类型: GenericArrayType 用来描述一个参数数组。 WildcardType 用来描述通配符?相关,包含?...Class 用来描述类Class对象。 ParameterizedType 用来描述参数化类型。

17.9K41

Java Generic 自定义如何自定义自定义边界共变性,逆变性对象比较

如何自定义 考虑我们要实现了一个节点对象,这个对象可以自定义类型,我们可以用语法进行如下定义: package Generic; public class Node { private...; E next(); void remove(); } 自定义边界 在定义时候,可以定义边界,例如下面的例子 class Animal {} class Human...int写死类型,为了让这个排序算法更为通用,我们可以使用,但要求是该形态必须具有可比较对象大小方法,一个方法就是要求排序对象实例化[java.lang.Comparable] class...如果我们需要重写对象equal方法,我们可能会这么写: import java.util.*; class Basket { T[] things; Basket(T.....,因為Java所採用態抹除,也就是說,程式中語法 態指定,僅提供編譯器使用,執行時期無法獲態資訊,因而instanceof在執行時期比對時,僅能針對Basket態比對,無法針對當中

1.1K10

【Java 简介 ( 类 | 方法 | 静态方法 | 类与方法完整示例 )

; java 与 C++ 模板 : Java 中 , 是仿照 C++ 中 模板 开发 , 目的是让开发者可以写出 通用 , 灵活 代码 ; 伪 : Java 中 , 是 伪...是参数化类型 , 可以由外部传入 * * @param */ public class Student { private String name; private..., 多个之间 , 使用逗号隔开 ; 方法 与 类 中 : 不同 : 方法指定 T 与 类中 T 没有任何关系 , 这两个 T 可以是不同类型 ; 相同..., 可以由外部传入 * * @param */ public class Student { private String name; private int age...* * @param */ public class Student { private String name; private int age; /**

13.6K30

【Flutter】Dart ( 类 | 方法 | 特定类型约束 )

创建对象 , 类型设置为 String 类型 Cache cache = Cache(); // 调用方法时 , 传入参数必须符合对应类型..., 使用 约束该必须是某个类子类 ; 类示例代码 : /// 特定类型约束 /// 将约束为某个类型子类 class Member<T extends...){ // 创建对象 , 类型设置为 String 类型 Cache cache = Cache(); // 调用方法时 , 传入参数必须符合对应类型.../ 创建对象 , 类型设置为 int 类型 Cache cache2 = Cache(); // 调用方法时 , 传入参数必须符合对应类型 //.../// get 方法 : 设置私有字段 achievement get 方法, /// 让外界可以访问 Person 对象 _achievement 私有成员 int

4.9K00

JAVA通配符T,E,K,V区别,T以及ClassClass区别

是Java SE 1.5新特性,本质是参数化类型,也就是说所操作数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法创建中,分别称为类、接口、方法。...) { this.object = object; } public T get() { return object; } } 创建一个Box对象,不带参数,发现获取对象时候需要强制转换...Box box2 = new Box(); box2.set(new Apple()); Apple apple = (Apple) box2.get(); 创建一个Box对象,带参数,获取对象时候就不需要强制转换...,可以在编译时候检查类型安全,可以用在类,方法,接口上 但是我们定义类,方法,接口时候经常会碰见很多不同通配符T,E,K,V等等,这些通配符又都是什么意思呢?...如何获取到Class类呢,有三种方式: 1. 调用Object类getClass()方法来得到Class对象,这也是最常见产生Class对象方法。

1.5K30

Go实战 | 如何在结构体中使用

上一篇文章给大家介绍了Go三步曲。今天给大家分享一篇在结构体中使用具体示例。 01 目标 假设我们要实现一个blog系统,我们有两个结构体:分类和文章。...ID int32 Categories []Category Title string Text string Slug string } 02 实现 根据Go使用三步曲...:类型参数化、定义类型约束、类型实例化,我们一步步来定义我们缓存结构体。...因为在中对类型参数进行约束是必要条件。所以要先定义类型约束。 因为要对分类Category类型和文章Post类型进行缓存,所以我们这里缓存类型约束限制在了这两个类型上。...cache,所以函数New也必须是型函数,只有这样才能将类型T具体值传递到结构体类型中。

2.8K20

擦除是什么意思_类和方法区别

大家好,又见面了,我是你们朋友全栈君 在严格代码里,带声明类总应该带着类型参数。但为了与老Java代码保持一致,也允许在使用带声明类时不指定实际类型。...如果没有为这个类指定实际类型,此时被称作raw type(原始类型),默认是声明该形参时指定第一个上限类型。...当把一个具有信息对象赋给另一个没有信息变量时,所有在尖括号之间类型信息都将被扔掉。...,List 是List子类,如果直接把一个List对象赋给一个List对象应该引起编译错误,但实际上不会。...对而言,可以直接把一个List对象赋给一个 List 对象,编译器仅仅提示“未经检查转换”。

1.3K30

使用委托,构筑最快通用属性访问

实现这个功能,第一反应使用反射遍历对象属性然后获取父类对象属性值,接着设置给子类对象同名属性。但一想到反射效率,就又打算才用另外方式来实现。...,改写成方法了: 首先,定义一个获取属性值和设置属性值委托: public delegate T GetPropertyValue(); public delegate void SetPropertyValue...在动态构设置对象属性值地方,比如ORM实体类属性赋值,用途很大。  ...Delegate.CreateDelegate(typeof(GetPropertyValue), obj, typeof(TSource).GetProperty(propertyName).GetGetMethod()); 创建委托方法仅针对当前实例对象...obj 有效,除非这是静态属性,它并不能作为一个通用类型属性访问器,所以将它缓存意义不大,但可以作为优化属性访问一个手段。

88890

类、方法、类型通配符使用

类、方法、类型通配符使用 一.类        声明和非声明类似,除了在类名后面添加了类型参数声明部分...和方法一样,类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个参数,也被称为一个类型变量,是用于指定一个类型名称标识符。...如下实例演示了我们如何定义一个类: 1 public class Box { 2 3 private T t; 4 5 public void add(T t)...注意类型参数只能代表引用类型,不能是原始类型(像int,double,char等) 1 public class GenericMethodTest 2 { 3 // 方法 printArray...下面的例子演示了"extends"如何使用在一般意义上意思"extends"(类)或者"implements"(接口)。该例子中方法返回三个可比较对象最大值。

3.8K40

Java探究及擦除机制和如何跳过编译阶段

> 通用类型 上边界通配符 举例: 代表从Number往下子类或孙类对象都可以使用 下边界通配符 举例: 代表从Integer 到Object所有的对象都可以 具体使用 规则 必须先声明再使用 声明是通过""实现 约定可以使用单个大写字母来表示 K E...T V 等 常见使用: 类 public class PersonNew { private T t; public T getT() { return...方法 public class Demo07 { /** * 普通方法 可以使用 类中定义 * @param k * @param v...在这里贴上两句百度上对解释:   Java 参数只可以代表类,不能代表个别对象。   由于 Java类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数类型。

48830
领券