反射获取函数的参数名

今天这篇博客记录下费神的问题
前提引入

众所周知,在jdk1.8里,相比前边的jdk版本还是做过很多的改变,比如ArrayList的扩容改到了set里,HashMap的扩容改到了put里之类的,而这些种种都在jdk源码里明确的说明了,并且对使用者来说没什么不一样,只是对分析错误有点影响。

问题带入

接下来我要说的是,jdk对反射做的变化,以前的jdk版本不能通过反射获取类的成员函数里的参数名,而jdk8之后的版本提供了这个方法,

Parameter[] paramter = me.getParameters();

/**
* Package-private constructor for {@code Parameter}.
*
* If method parameter data is present in the classfile, then the
* JVM creates {@code Parameter} objects directly. If it is
* absent, however, then {@code Executable} uses this constructor
* to synthesize them.
*
* @param name The name of the parameter.
* @param modifiers The modifier flags for the parameter.
* @param executable The executable which defines this parameter.
* @param index The index of the parameter.
*/
源码说道:方法参数信息。也就是可以获取成员方法的参数信息,诸如参数类型,参数个数,参数名字之类。

划重点

问题就出现在这里
我通过几行剪短代码说明吧

package reflect;

public class People {
	public  String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "People [name=" + name + "]";
	}

	public People(String name) {
		super();
		this.name = name;
	}

	public People() {
		super();
	} 
}

people类里有setName 方法,我要通过反射获取到setName方法里的String name 的那么名字
反射代码如下:

package reflect_function_params;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;
import java.util.Arrays;

import com.sun.xml.internal.ws.wsdl.writer.document.ParamType;
import java.lang.reflect.Field;
import reflect.People;

/**
 * @author chunchun
 *@date 2020年9月25日
 * @projectname Thread_concurrent
 * 反射获取函数参数名称
 */
public class FunParams {
	public static void main(String[] args) {
		//通过类获取对象
		Class  c = People.class;
		  Method[] meyhods = c.getMethods();
		  for(Method me :meyhods) {
			  Parameter[] paramter = me.getParameters();
			  for (Parameter pa : paramter) {
				System.out.println(pa.getName());
			}
		  }
}
}

在这里插入图片描述
结果却是这样,一堆的不知名org0或者org1,这时候就懵逼了,说明狗屁玩意,我就想用反射获取个参数名字,你这是给我搞到JVM里去深造了不成,接下来就是看各种博客,以及打各种测试代码,直到莫一时刻,我开始怀疑是不是搞jdk这些人故意下的套,毕竟jdk目前有的问题也不好,最简单的继承机制里的重复继承,这个问题持续几十年也没人搞。终于在研究eclipse的时候发现了这个
在这里插入图片描述
注意看这句话在这里插入图片描述
突然雨过风晴啊,原来parameter参数要手动开启啊
只要把这项勾起应用就完事了

我们要的name出来了,hhhh
说一下为什么我会研究到这里呢,其实是回过头来用servlet写demol,发现一个请求对应一个servlet实在太傻了,所以想自己搭一个小小的框架。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值