如何获得当前类的字段,方法参数泛型的类型

如何获得当前类的字段,方法参数泛型的类型,第1张

获得方法的代码如下,字段的类似

/

  Project Name [online-courses]

  File Name      [day02genericGenericDemo5java]

  Creation Date  [2016-11-23]

  <p>

  Copyright© 2016 geyyang@hotmailcom All Rights Reserved

  <p>

  Work hard, play harder, think big and keep fit

 /

package day02generic;

import javalangreflectMethod;

import javalangreflectParameterizedType;

import javalangreflectType;

import javautilList;

/

  泛型示例-使用反射获取泛型类型<br />

 

  @author <a href="mailto:geyyang@hotmailcom">杨舸</a>

  @version 100

  @since jdk 18

 /

public final class GenericDemo5 {

    public void testGenericReflection(List<String> list) {

    }

    /

      测试方法<br />

     

      @param args 命令行参数

      @throws Exception 抛出的异常

     /

    public static void main(String[] args) throws Exception {

        Method method = GenericDemo5classgetMethod("testGenericReflection", Listclass);

        Type[] parameterTypes = methodgetGenericParameterTypes();

        ParameterizedType parameterType = (ParameterizedType) parameterTypes[0]; // 获得第一个泛型参数, Collection类型的集合只有一个泛型参数, Map类型的集合有两个泛型参数

        Systemoutprintln(parameterTypegetRawType()); // interface javautilList

        Systemoutprintln(parameterTypegetTypeName()); // javautilList<javalangString>

        Systemoutprintln(parameterTypegetActualTypeArguments()[0]); // class javalangString

    }

}

ClassgetDeclaredMethod() 是获取这个类中所有的方法,返回的是Method[]如果有参数,第1个是方法名称,第2个是该方法的所有参数数组,这样返回的是Method这个对象Methodinvoke() 传入调用方法的类,另一个是调用这个方法所需要的参数,如果该方法没有参数,可以不填写,在JDK1,4之前,第2个参数是传入一个数组的,但是在jdk15之后,可以不传数组,多个参数用逗号隔开 不知道你听明白没

写nulld出的警告是无影响的,可以用加@SuppressWarnings屏蔽

手册上推荐写法是getMethod("show",(Class<>[]) null);强制转型

另外一个符合类型的写法是getMethod("show", new Class<>[0]);

把所有方法找出来,然后通过方法名字来推测是哪个,你既然打算反射,当然是别人通过一个字符串把要调用的方法名告诉你了,如果你连方法名都不知道,就表示你不知道要自己做什么,如果这个反射是有“人”通过界面输入来动态地执行那就表示那个“人”不知道自己要做什么?这就是另一个问题了,不是 Java 问题。

public class refP{

public static void main(String[] args)

{

Class userClass=Stringclass;//将此处换成你的class 就成了

//---- 获取所有构造方法

Constructor[] cons=userClassgetDeclaredConstructors();

Systemoutprintln("类User的构造方法包括: ");

//---- 打印出构造方法的前缀

for (int i=0;i<conslength;i++)

{

Constructor con=cons[i]; //取出第i个构造方法。

Systemoutprint(ModifiertoString(congetModifiers()));

//---- 打印该构造方法的前缀修饰符

Systemoutprint(" "+congetName()+"("); //打印该构造方法的名字

//---- 打印该构造方法的参数。

Class[] parameterTypes=congetParameterTypes(); //构造方法参数集但是 数组类型显示特殊

for(int j=0;j<parameterTypeslength;j++)

{

Systemoutprint(parameterTypes[j]getName());

}

Systemoutprintln(")");

}

}

}

/核心语句:

Class userClass=Stringclass;//找到对应的class类

Constructor[] cons=userClassgetDeclaredConstructors();//找到对应的构造器数组

Class[] parameterTypes=congetParameterTypes(); //找到每个构造器对应的参数类型数组

反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分。

1获得方法包括获得方法的名称,方法的返回类型,方法的访问修饰符,以及通过反射执行这个方法。

2获得属性包括属性的名称,类型,访问修饰符,以及这个属性的值。

这些获得都有相应的API提供 *** 作。

举个例子:

先定义一个类,有age这个属性,以及age的get和set方法:

public class TestRflectionFather {

public int age =32;

public int getAge() {

return age;

}

public void setAge(int age) {

thisage = age;

}

}

然后 *** 作获得所有方法:

import javalangreflectMethod;

public class Testmain {

public static void main(String[] args) throws Exception {

Class clazz = ClassforName("TestRflectionFather");

Method[] methods =clazzgetDeclaredMethods();

for(Method me:methods)

{

Systemoutprintln(megetName());

}

}

}

//最后输出

getAge

setAge

在java中,可以通过反射获取到类、字段、方法签名等相关的信息,像方法名、返回值类型、参数类型、泛型类型参数等,但是不能够获取方法的参数名。在实际开发场景中,有时需要根据方法的参数名做一些 *** 作,比如像spring-mvc中,@RequestParam、@PathVariable注解,如果不指定相应的value属性,默认就是使用方法的参数名做为>

以上就是关于如何获得当前类的字段,方法参数泛型的类型全部的内容,包括:如何获得当前类的字段,方法参数泛型的类型、Java反射机制获取set()方法 并且为set()方法传值、java 反射中如何获取一个参数为空的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9824573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存