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

硅谷探秘者 算法基础 422 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的实际类型

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

猜你喜欢
java基础 1587 1.什么是Java(generics)是JDK5引入一个新特性,提供了编译时安全检测机制,该机制允许程序员在编译时检测到非法本质是参数化,也就是说所操作
weblog 2305 c#数据 c#数据分为值引用有包括(结构体,枚举) 引用又包括(,数组,委托) c#数据派生谱系 值
java虚拟机(jvm) 4276 1.内部名在许多情况下,一种只能是。例如,一个、由一个,或者由一个方法抛出异常就不能是基元或数组,必须是。这些在已编译用内部名字表示
java基础 3214 (class)(interface)数组byte: byte数据是8位、有符号,以二进制补码表示整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; byt
weblog 203 mysql整数范围MySQL支持多种数据,大致可以分为三:数值、日期/时间字符串(字符)。其,整数包括:TINYINT、SMALLINT、MEDIUMINT、INT
weblog 4494 栗子usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApplication3{classProgram{staticvoidMain(string[]args){Stones=newStone(1000)
official 15 列上面。Worker会从队列未被读数据处理。交换机有4种不同交换机:直连交换机:Directexchange扇形交换机:Fanoutexchange主题交换机:Topicexchange
java基础 405 参数 抽象 默认方法 它可以有默认方法 完全是抽象。它根本不存在方法 使用extends关键字来
归档
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
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo
目录