ParameterizedType详解

ParameterizedType详解Parameterize 详解参数化类型 publicinterf Type getActualTyp TypegetRawTy TypegetOwner 何为参数化类型列举一个实体类用代码来解释什么

ParameterizedType详解

参数化类型

public interface ParameterizedType extends Type { 
    Type[] getActualTypeArguments(); Type getRawType(); Type getOwnerType(); }

何为参数化类型

列举一个实体类用代码来解释什么是参数化类型

public class ParameterizedBean { List<String> list1; List list2; Map<String,Long> map1; Map map2; Map.Entry<Long,Short> map3; }

测试代码

Field[] fields = ParameterizedBean.class.getDeclaredFields(); for(Field f:fields){ //是否是ParameterizedType System.out.print(f.getName()+":"+(f.getGenericType() instanceof ParameterizedType)); }

打印结果

list1:true list2:false map1:true map2:false map3:true 

从打印结果看来,具有<>符号的变量是参数化类型

Type[] getActualTypeArguments()

该方法返回一个Type数组

测试代码

Field[] fields = ParameterizedBean.class.getDeclaredFields(); for(Field f:fields){ if(f.getGenericType() instanceof ParameterizedType){ ParameterizedType pType =(ParameterizedType) f.getGenericType(); System.out.print("变量:"+pType.getTypeName()+" "); Type[] types =pType.getActualTypeArguments(); for(Type t:types){ System.out.print("类型:"+t.getTypeName()); } }

先把实体类放下来,免得往上翻

public class ParameterizedBean { List 
  
    list1; List list2; Map 
   
     map1; Map map2; Map.Entry 
    
      map3; } 
     
    
  

打印结果

变量:list1 类型:java.lang.String 变量:map1 类型:java.lang.String类型:java.lang.Long 变量:map3 类型:java.lang.Long类型:java.lang.Short 

从打印结果返回来看,getActualTypeArguments()返回了一个Type数组,数组里是参数化类型的参数

Type getRawType()

获取变量的类型

还是用代码最有说服力

测试代码

Field[] fields = ParameterizedBean.class.getDeclaredFields(); for(Field f:fields){ if(f.getGenericType() instanceof ParameterizedType){ ParameterizedType pType = (ParameterizedType) f.getGenericType(); System.out.print("变量:"+f.getName()); System.out.print("RawType:"+pType.getRawType().getTypeName(); } }

先放实体类

public class ParameterizedBean { List<String> list1; List list2; Map<String,Long> map1; Map map2; Map.Entry<Long,Short> map3; }

打印结果

变量:list1 RawType:java.util.List 变量:map1 RawType:java.util.Map 变量:map3 RawType:java.util.Map$Entry

从打印结果来看,其实也就是变量的类型

Type getOwnerType()

这个不太好理解,好不好理解代码都能解释清楚

测试代码

Field[] fields = ParameterizedBean.class.getDeclaredFields(); for(Field f:fields){ if(f.getGenericType() instanceof ParameterizedType){ ParameterizedType pType = (ParameterizedType) f.getGenericType(); System.out.print("变量:"+f.getName()); Type t = pType.getOwnerType(); if(t == null){ System.out.print("OwnerType:Null "); }else{ System.out.print("OwnerType:"+t.getTypeName()); } } }

先放实体类

public class ParameterizedBean { List<String> list1; List list2; Map<String,Long> map1; Map map2; Map.Entry<Long,Short> map3; }

打印结果

变量:list1 OwnerType:Null 变量:map1 OwnerType:Null 变量:map3 OwnerType:java.util.Map 

从打印结果来看,前面两个都为null,最后一个为Map类型

这里放一下官方解释

Returns a {@code Type} object representing the type that this type is a member of

例子

For example, if this type is {@code O<T>.I<S>},return a representation of {@code O<T>}

依据解释,我们知道

O<T>.I<S>类型的变量,调用getOwnerType()会返回O<T>

以上就是ParameterizedType的内容

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202851.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:09
下一篇 2026年3月19日 下午11:09


相关推荐

  • currentstyle 织梦_织梦channel标签currentstyle样式无效不起作用

    currentstyle 织梦_织梦channel标签currentstyle样式无效不起作用我们在用织梦系统制作网站时,经常会用到channel标签来调子栏目。但是,很多朋友会遇到这种情况在使用channel标签来调子栏目的时候,指定“type=sontypeid=x”发现currentstyle无效。今天笔者就跟大家分享一下解决方法。1、解决channel标签currentstyle样式无效不起作用的错误方法代码如下:{dede:type=’son’typeid=’12’c…

    2022年7月14日
    17
  • Pytest(1)安装与入门「建议收藏」

    Pytest(1)安装与入门「建议收藏」pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月30日
    9
  • AI 编程助手 OpenCode 入门:15个工具+自定义代理+项目规则

    AI 编程助手 OpenCode 入门:15个工具+自定义代理+项目规则

    2026年3月16日
    3
  • 关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现

    关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现程序有3个控件BindingNavigator:就是DataGridView控件上面的那个,在工程里名字:bindngrDemoDataGridView:dgvDemoBindingSource:这个其实可以不要bindseDemo 示例采用的是SQLSERVER的示例数据库pub在pub数据库里写入分页存储过程CREATEPROCEDURE[db…

    2022年7月12日
    26
  • nginx配置ssl证书实现https访问_更换ssl证书

    nginx配置ssl证书实现https访问_更换ssl证书1,登录阿里云,工作台找SSL证书或者安全下找CA证书2,点击创建证书(或购买证书),创建好以后点击证书申请、3,设置配置以及域名信息,仅填写圈住内容,其他默认即可4,随后等待一会,查看状态,是否为 已签发5,为已签发时,点击下载选择下载类型6,下载后解压文件7,上传至服务器,存放位置,先找到nginx所在位置 “/nginx/conf/”找到该位置创建“cert”把刚才解压的两个文件存放至此。8,开始nginx配置内容`server { #SSL 访问端口号为 443 li

    2022年8月19日
    54
  • 第七届蓝桥杯省赛A7:剪邮票

    第七届蓝桥杯省赛A7:剪邮票题目描述 如 图 1 jpg 有 12 张连在一起的 12 生肖的邮票 现在你要从中剪下 5 张来 要求必须是连着的 仅仅连接一个角不算相连 比如 图 2 jpg 图 3 jpg 中 粉红色所示部分就是合格的剪取 请你计算 一共有多少种不同的剪取方法 请填写表示方案数目的整数 注意 你提交的应该是一个整数 不要填写任何多余的内容或说明性文字 思路分析全排列加连通块判断 初始化一个

    2026年3月26日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号