获取类实现接口中泛型的实际类型,和继承类中泛型的实际类型(java)

硅谷探秘者 算法基础 1869 0 0

如果一个类实现了一个接口,如何获取接口中泛型的实际类型

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

class Head{
}
interface Animal<T>{
}
class Dog implements Animal<Head>{
}
public class Test {
    public static void main(String[] args){
        Animal animal=new Dog();
        Type genericInterface = animal.getClass().getGenericInterfaces()[0];
        ParameterizedType genericInterface1 = (ParameterizedType) genericInterface;
        Class cname=(Class)genericInterface1.getActualTypeArguments()[0];
        System.out.println(cname);
        // 打印 class com.weblogc.design.test.Head
    }
}

获取class Dog implements Animal<Head> Head的实际类型

如果一个类继承了另一个类,如何获取继承类中泛型的实际类型

import java.lang.reflect.ParameterizedType;
class Money{
}
class Person<T>{
}
class Man extends Person<Money>{
}
public class Test2 {
    public static void main(String[] args){
        Person man=new Man();
        ParameterizedType parameterizedType=(ParameterizedType)man.getClass().getGenericSuperclass();
        Class actualTypeArgument = (Class)parameterizedType.getActualTypeArguments()[0];
        System.out.println(actualTypeArgument);
        // 打印 class com.weblogc.design.test.Money
    }
}

获取class Man extends Person<Money> Money的实际类型

搞明白这两个知识点 对一些框架设计,以及架构很有帮助。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
weblog 3060 c#数据 c#数据分为值引用有包括(结构体,枚举) 引用又包括(,数组,委托) c#数据派生谱系 值
java基础 2625 1.什么是Java(generics)是JDK5引入一个新特性,提供了编译时安全检测机制,该机制允许程序员在编译时检测到非法本质是参数化,也就是说所操作
java基础 4175 (class)(interface)数组byte: byte数据是8位、有符号,以二进制补码表示整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; byt
java虚拟机(jvm) 5688 1.内部名在许多情况下,一种只能是。例如,一个、由一个,或者由一个方法抛出异常就不能是基元或数组,必须是。这些在已编译用内部名字表示
weblog 1004 mysql整数范围MySQL支持多种数据,大致可以分为三:数值、日期/时间字符串(字符)。其,整数包括:TINYINT、SMALLINT、MEDIUMINT、INT
weblog 5176 栗子usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApplication3{classProgram{staticvoidMain(string[]args){Stones=newStone(1000)
java基础 1639   为什么要问这个问题,⾸先在Java定义⼋种基本数据,除了其它七种都有明确内存占⽤字节数外,就boolean没有给出具体占⽤字节数,因为对虚拟机来说根本就不存在boolean
official 767 列上面。Worker会从队列未被读数据处理。交换机有4种不同交换机:直连交换机:Directexchange扇形交换机:Fanoutexchange主题交换机:Topicexchange
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。