Java 8新增的方法参数反射实例分析

作者:cakincqm 时间:2021-11-20 05:55:30 

本文实例讲述了Java 8新增的方法参数反射。分享给大家供大家参考,具体如下:

一 点睛

Java 8在java.lang.reflect包下新增了一个Executable抽象基类,该对象代表可执行的类成员,该类派生了Constructor、Method两个子类。

Executable基类提供了大量方法来获取修饰该方法或构造器的注解信息;还提供了isVarArgs()方法用于判断该方法或构造器是否包含数量可变的形参,以及通过getModifiers()方法来获取该方法或构造器的修饰符。除此之外,Executable提供了如下两个方法来获取该方法或参数的形参个数及形参名。

int getParameterCount():获取该构造器或方法的形参个数。

Parameter[] getParameters():获取该构造器或方法的所有形参。

上面第二个方法返回了一个Parameter[]数组,Parameter也是Java 8新增的API,每个Parameter对象代表方法或构造器的一个参数。Parameter也提供了大量方法来获取声明该参数的泛型信息。

二 实战

1 代码


import java.lang.reflect.*;
import java.util.*;
class Test
{
 public void replace(String str, List<String> list){}
}
public class MethodParameterTest
{
 public static void main(String[] args)throws Exception
 {
  // 获取String的类
  Class<Test> clazz = Test.class;
  // 获取String类的带两个参数的replace()方法
  Method replace = clazz.getMethod("replace"
     , String.class, List.class);
  // 获取指定方法的参数个数
  System.out.println("replace方法参数个数:" + replace.getParameterCount());
  // 获取replace的所有参数信息
  Parameter[] parameters = replace.getParameters();
  int index = 1;
  // 遍历所有参数
  for (Parameter p : parameters)
  {
    if (p.isNamePresent())
    {
     System.out.println("---第" + index++ + "个参数信息---");
     System.out.println("参数名:" + p.getName());
     System.out.println("形参类型:" + p.getType());
     System.out.println("泛型类型:" + p.getParameterizedType());
    }
  }
 }
}

2 运行

E:\Java\疯狂java讲义\codes\18\18.3>javac -parameters -d . MethodParameterTest.java
E:\Java\疯狂java讲义\codes\18\18.3>java MethodParameterTest
replace方法参数个数:2
---第1个参数信息---
参数名:str
形参类型:class java.lang.String
泛型类型:class java.lang.String
---第2个参数信息---
参数名:list
形参类型:interface java.util.List
泛型类型:java.util.List<java.lang.String>

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

来源:https://blog.csdn.net/chengqiuming/article/details/94971934

标签:Java,8,方法参数,反射
0
投稿

猜你喜欢

  • 通过Docker启动Solace并在Spring Boot通过JMS整合Solace的操作方法

    2023-07-11 09:52:28
  • SpringBoot应用jar包启动原理详解

    2022-07-08 09:45:48
  • Android如何在Gradle中更改APK文件名详解

    2021-06-02 12:59:31
  • Java编程实现帕斯卡三角形代码示例

    2023-11-02 08:08:24
  • 解答为什么 Java 线程没有Running状态

    2021-08-25 13:10:33
  • 详解Android开发中Fragment的使用

    2023-05-02 20:32:25
  • 深入剖析Java中String类的concat方法

    2023-06-02 07:07:13
  • Spring Boot高级教程之使用Redis实现session共享

    2022-10-20 09:59:01
  • SpringBoot整合websocket实现即时通信聊天

    2022-12-12 15:14:32
  • Java中的this和super实例浅析

    2023-03-03 13:24:09
  • 详解Android自定义控件属性TypedArray以及attrs

    2023-06-20 05:13:41
  • Android 使用PDF.js浏览pdf的方法示例

    2021-12-08 06:11:41
  • C#实现异步的常用方式总结

    2023-10-26 17:25:13
  • intellij idea中spring boot properties文件不能自动提示问题解决

    2021-09-24 09:53:46
  • Java中的字节,字符输出流与字节和字符输入流的简单理解

    2022-11-30 01:56:13
  • C#仿QQ聊天窗口

    2022-09-30 09:12:39
  • Android实现拼图小游戏

    2023-03-01 11:25:46
  • 详解Spring-bean的循环依赖以及解决方式

    2023-08-18 18:30:38
  • jdbc中class.forname的作用

    2023-04-13 00:56:18
  • Java 1.8使用数组实现循环队列

    2022-02-11 04:00:10
  • asp之家 软件编程 m.aspxhome.com