Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型

假设有如下类

class   A

{

     public  void   show(Vector<Integer> v)  {}
}  

在我们不知道Vector中数据的类型的时候 这时候我们只知道这个方法的名字  和参数的个数 ,我们来获取 范型化的实际类型 。 

我们不可能通过 Vector对应的Class类来反射出  泛型集合中的类型  ,但是 我们却可以通过 这个方法所对应的Method类来实现 。

具体如下  :

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Vector;

public class Test3
{
 public static void main(String []args) throws SecurityException, NoSuchMethodException
 {
  Method  m=A.class.getMethod("show", Vector.class) ;      //反射获得show方法的Method对象
  Type[]t=m.getGenericParameterTypes() ;      //获得范型参数的 一个Type数组  Type是Class类的基类 GenericArrayType, ParameterizedType, TypeVariable<D>, WildcardType  这些都是 实现Type的子接口
  ParameterizedType p=(ParameterizedType)t[0];     //强制转换成Type的子接口 ParameterizedType类型 因为这个接口又可以获得 范型化集合中元素的类型    System.out.println(p.getRawType());                     //获得集合的类型 

  System.out.println(p.getActualTypeArguments()[0]);   //获得集合中元素的类型
 }

}

 

 

 

时间: 2024-08-21 17:07:20

Java利用反射来获取一个方法的 范型化参数 Vector&lt;Integer&gt;的类型的相关文章

Java利用反射自动封装成实体对象的方法_java

本文实例讲述了Java利用反射自动封装成实体对象的方法.分享给大家供大家参考.具体分析如下: 利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,比如页面传递name+rowNo,那么实体对象的属性名应该为name.代码如下 复制代码 代码如下: //获取页面数据,自动封装成bean对象 public List getObjectList(Class clazz,String[] rowNos) throws Exception{         List objList

[Java] 利用xpdf库获取pdf文件的指定范围文本内容

[Java] 利用xpdf库获取pdf文件的指定范围文本内容 编写者 日期 关键词 郑昀@ultrapower 2005-8-2 Java PDF xpdf   概述 读取PDF文件的某一部分文本内容,可以使用开源项目xpdf. 从Java中调用xpdf,我们参照了<Java抽取Word,PDF的四种武器>文章最后提到的办法. 总而言之,调用xpdf十分简单,下面讲一下xpdf的配置问题. 系统基础环境要求 下面是对运行xpdf软件服务的计算机的要求: l         您可以从以下位置下载

反射 注解-Java利用反射执行框架注入类的非静态方法

问题描述 Java利用反射执行框架注入类的非静态方法 之前对代码做优化,利用了反射去执行指定类的指定方法: public static JsonResultVO callMethod(Class<?> className String methodName Class<?>[] paramClass Object[] param) { JsonResultVO resultVO = new JsonResultVO(); try { Method m = className.get

java监听-java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象

问题描述 java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象 java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象 比如用在监听方法当中作为参数的时候 解决方案 可以这么理解,通常是创建一个匿名类的实例然后作为参数传递给指定方法 . 解决方案二: 匿名类,作为参数是返回相应的匿名对象. 具体还是要看调用的函数有参数要求吧,参数是一个对应的匿名类,或者其父类,使用它就没有问题.

初学java没多久,有一个实验是根据输入的参数个数来计算是正方形还是长方形的面积

问题描述 初学java没多久,有一个实验是根据输入的参数个数来计算是正方形还是长方形的面积 不知道如何中断输入,决定输入个数的参数,关于输入流就知道一个Scanner类,求大神指点 解决方案 你说的不是很详细的,根据你描述的:如果输入的参数是一个,可以判定是正方形,因为正方形的面积=边*边. 而如果输入的参数是两个,则可判定是长方形,因为长方形的面积=长*宽.

java 通过反射怎么获取方法中参数值

问题描述 publicUserinfofindById(Stringid){} 例如我有上面的一个方法我现在通过反射已经得到了参数名也就是得到了参数类型是java.util.String但我现在要获取到id这个值应该怎么获取 解决方案 解决方案二:上面的代码是一个接口的实现类我已经在一个类中调用了这个接口并传入了id值但我现在想做的功能是通过java反射在这个接口的实现类里做一些逻辑处理现在我通过反射已经获取该接口实现类的方法名及方法参数类型但不知道如何获取传过来的这个id值我要通过这个不通的i

kettle job如何利用java的反射机制获取执行的sql语句

kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制获取执行的sql. 如: var sqlObj = getJobStep("SQL"); var sql = sqlObj.environmentSubstitute(sqlObj.getSQL()); var logWriter = org.pentaho.di.core.logging

怎么限制一个方法中传入的某个参数只能是int或者是String类型,我考虑的是枚举但是不知道这个枚举怎么写

问题描述 我有一个方法如下:public List findBySth(String model,String sth, IntOrStr parameter){ //do something;}这个方法里我要限制parameter参数要么是int要么是String,所以我声明了一个枚举IntOrStr,public enum IntOrStr {}当这个parameter参数被声明为IntOrStr是,IntOrStr返回int或者String Type,但是这个枚举IntOrStr应该怎么写

利用错误关键词获取流量方法分享

草根站长在想要在百度获取更多的流量似乎已经变得很困难了,有时候文章虽然是原创的,但是也没能给我们带来多少流量.热门事件的关键词都被大网站拿下了,小网站很难从中分得一杯羹.怎么办?SEO专员通常建议做长尾关键词.其实长尾关键词也不好做,你会这样做,别人也会做.大家都做长尾关键词,大家都没流量.有句话说得好:一个和尚有水喝,两个和尚挑水喝,三个和尚没水喝.这个道理大家都懂的,搜索引擎的发展就要求我们的seo技术要不断进步,seo技术要跟随搜索引擎. 先让大家看下"QQ钻黄"这个关键词的百度