首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

根据java编译器规则在Class中搜索匹配指定参数类型泛型方法(GenericMethod)

因为项目的需要,设计了一个满足特定需要代码自动生成工具。在开发过程中需要根据方法名和方法参数类型数组在指定类中根据java编译器规则找到与之最匹配泛型方法。...,发现java编译器在匹配泛型方法时,对参数匹配是遵循从左到右顺序来一个个检查,根据这个规则写了下面的方法来实现泛型方法精确匹配。.../** * @param clazz 要搜索类 * @param name 方法名 * @param parameterTypes 希望匹配参数类型数组 *...) it.remove(); } if (methods.size() <= 1) //找到唯一匹配方法或没有匹配方法就中止循环...it.remove(); } if (methods.size() <= 1) //找到唯一匹配方法或没有匹配方法就中止循环

1.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

10万行30列数据乘上系数,快一些?含“函数作为参数触类旁通方法

比如说,我们在做转换时候,虽然只能对一列进行加乘,但是可以对多个列同时做其他处理,比如更改类型、舍入等等,如下图所示: 小勤:这有什么用啊?...大海:那不是可以拷到文本或word文件里替换然后再拷回来?替换后修改参数如下,即将所有的Number.Round(_,2)替换为_*系数: 小勤:好吧,虽然有点儿周折,但也还能接受。...还有更好办法?...,然后做个简单替换(如0替换为0)以生成公式: 这时,生成步骤公式如下: 我们只要把其中Replacer.ReplaceValue参数(数据替换方法)改掉即可,具体修改如下...大海:这是Table.ReplaceValue中第三个参数(数据替换方法使用方式,其中x是要进行替换初始值,也就是我们表里每一个原始内容,y就是我们输入要查找值(0),z就是我们要替换为

66120

反射中Method类invoke() 和getMethod()

>… parameterTypes)作用是获得对象所声明公开方法方法第一个参数name是要获得方法名字,第二个参数parameterTypes是按声明顺序标识该方法形参类型。...为String.class 如果对象内方法形参是int类型,则parameterTypes是int.class //getMethod第一个参数方法名,第二个参数是该方法参数类型, //因为存在同方法名不同参数这种情况...,所以只有同时指定方法名和参数类型才能唯一确定一个方法 Method method = XXX.getClass().getMethod(methodName,new Class[0]); //第一个参数是具体调用该方法对象...//如果参数为基本类型数据,必须转换为相应包装类型对象。...; //数组类型参数必须包含在new Object[]{}中,否则会报IllegalArgumentException String[] strings

1.2K20

Java 虚拟机:JVM是如何实现反射

其中,Class.forName 会调用本地方法Class.getMethod 则会遍历该类公有方法。如果没有匹配到,它还将遍历父类公有方法。可想而知,这两个操作都非常费时。...在实践中,我们往往会在应用程序中缓存 Class.forName 和 Class.getMethod 结果。因此,下面我就只关注反射调用本身性能开销。...由于目标方法 Test.target 接收一个 int 类型参数,因此我传入 128 作为反射调用参数,测得结果约为基准 2.7 倍。...方法反射调用会带来不少性能开销,原因主要有三个:变长参数方法导致 Object 数组,基本类型自动装箱、拆箱,还有最重要方法内联。...今天实践环节,你可以将最后一段代码中 polluteProfile 方法两个 Method 对象,都改成获取名字为“target”方法。请问这两个获得 Method 对象是同一个(==)?

1.5K40

关于 Java 你不知道十件事

不过稍等,Java 文档中关于 Class.getMethod(String, Class…) 这样写道: 请注意,在一个类中会有多个匹配方法,因为虽然 Java 语法规则禁止一个类中存在多个方法函数签名相同仅仅返回类型不同...这样提高了 JVM 灵活性以实现各种语言特性。例如,可以用桥接方法(bridge method)来实现方法协变返回类型,桥接方法和被重载方法可以有相同函数签名和不同返回值类型。...大多数人会认为以下两个代码片段是等效: ? 与下边等效? ? 答案是并非如此,我们做个小测试。 ? 是的,在确有必要情况下,条件表达式会升级数字类型。你希望这个程序抛出一个空指针异常?...Java 8 中保留了这个功能,你可以将类型转换为临时类型交集。这有用?几乎没用,但如果你想要将lambda表达式强制转换为这个类型,除此就别无他法了。我们假设你方法有这个疯狂类型限制: ?...Lambda 和序列化都有些古怪: Lambda 表达式可以被序列化: 如果一个 lambda 表达式返回值和输入参数可以被序列化,则这个表达式是可以被序列化

60810

深入理解代理模式

Constructor,若类没有无参Constructor时会出错 Constructor ctr = c.getConstructor(Movable.class); // 可以得到带有参数构造方法...首先,要实现对任意接口任意方法代理: 实现代理任意接口: 我们要把接口类型作为参数传给MyProxynewProxyInstance(Class inface); 代理接口所有方法: 用inface.getMethods...()取出所有方法,拼接实现方法字符串(反射); 要实现代理任意逻辑: 要把代理逻辑抽离,应独立出一个策略接口: MyInvocationHandler接口,并接收被代理对象及方法作为参数invoke...作为成员遍历放到$MyProxy0中,而且在每一个代理方法内部,要调用被代理对象原始方法,具体就是下面两行: " Method md = " + inface.getName() + ".class.getMethod...,现在看代码实现: 代码: /** * 处理任何方法 调用 只要给我一个Method就能对这个方法进行特殊处理 * 特殊处理方式是由子类(实现类)决定 */ public interface

37840

阶段01Java基础day26反射

要想解剖一个类,必须先要获取到该类字节码文件对象。 而解剖使用就是Class类中方法,所以先要获取到每一个字节码文件对应Class类型对象。...setAccessible(true)设置访问权限,用获取指定字段调用get(obj)可以获取指定对象中该字段值 27.07_反射(通过反射获取方法并使用) Method Class.getMethod...和 Class.getDeclaredMethod(String, Class...)方法可以获取类中指定方法,调用invoke(Object, Object...)可以调用该方法,Class.getMethod...("eat") invoke(obj) Class.getMethod("eat",int.class) invoke(obj,10) 27.08_反射(通过反射越过泛型检查) A:案例演示 ArrayList...C:案例演示 自己实现枚举类 1,自动拆装箱 2,泛型 3,可变参数 4,静态导入 5,增强for循环 6,互斥锁 7,枚举 27.14_JDK5新特性(通过enum实现枚举类) A:案例演示 通过

43010

代理、反射、注解、hook

这样就很简单了,黑客们只需要找到开发者在使用EditText控件getText方法后进行网络验证方法,Hook该方法,就能劫持到用户账户与密码了 hook练习 ---- AOP(AspectJ...Class.getMethod(...)还要查找所有的方法。 而注解编译期间就完成了注解反射工作, jvm只是读取。...反射缺点 不安全 编译器没法对反射相关代码做优化 慢原因还有安全检查,访问控制等。比如说这个方法能不能获得,能不能执行等,传进参数类型检查等。...method.getGenericParameterTypes();获取方法参数类型,里面带有实际参数类型。...method.getParameterAnnotations();获取方法参数上面的注解,是一个二维数组,第一个维度代表方法参数对应下标,比如,一个方法有3个参数,那0代表第一个参数,1代表第二个参数

46250

Java进阶-反射详解与应用

Class.forName(String)方法用于获取类Class对象;Class.newInstance()方法可以创建类一个新实例;Class.getMethod()和Class.getField...这里关键步骤包括获取方法Method对象,然后使用invoke方法来执行它。getMethod方法参数是要调用方法名称,以及一个类对象数组,表示方法参数类型。...该方法接收两个int类型参数。然后,使用Method.invoke调用该方法。invoke第一个参数是要在其上调用方法对象实例(如果方法是静态,则为null),后续参数方法调用实际参数。...③ 调用泛型方法Java中泛型信息在运行时是被擦除,这意味着泛型类型参数在编译后变为它们边界类型(未指定边界则变为Object)。因此,直接通过反射调用泛型方法时,通常不需要特别处理类型参数。...反射调用这样方法时,需要特别注意传递参数类型

54142

Java反射介绍

反射概述 什么是反射 Java反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类所有属性和方法;对于任意一个对象,都能够调用它任意方法和属性,既然拿到那么,我们就可以修改部分类型信息...可以使用Method对象获取方法信息,包括方法名、修饰符、参数类型和返回类型,并可以调用方法。 Constructor类:表示类中构造函数。...可以使用Constructor对象获取构造函数信息,包括修饰符和参数类型,并可以使用构造方法 通过反射获取Class对象 反射获取对象一共有三种方式: 使用Class.forName方法:可以指定类全限定名...使用Class.getMethodClass.getDeclaredMethod方法:可以获取指定名称和参数类型公共方法或所有方法(包括私有方法)。...通过class对象获取到实例对象中方法对象,参数方法名,形参类型列表。 为获取私有方法开访问权限。 通过invork方法调用方法

10810

如果你每次面试前都要去背一篇Spring中Bean生命周期,请看完这篇文章

究其原因在于,你没有理解为什么需要这些步骤,也不知道为什么要按这个顺序执行 笔者在阅读完整个IOC跟AOP源码后,希望通过这篇文章讲一讲我Spring中Bean生命周期看法,帮助大家理解性记忆整个流程...{ // 推测bean类型,例如在属性注入阶段我们就需要知道符合依赖类型Bean有哪些 @Nullable default Class<?...我们看源码到一定阶段后不应该仅仅停留在是什么阶段,而应该多思考为什么,这样帮助你更好了解这个框架 那么为什么Aware接口非要在初始化前执行呢?...// 第一步:找到这个方法 Method method = class.getMethod(methodName) // 第二步:反射调用这个方法 method.invoke(bean,null)...Bean生命周期,不过理解是建立在有一定知识存储基础上 你至少要对Bean后置处理器跟Bean创建有一个大概理解,那么通过本文你理清一些细节方面的东西 例如,为什么Aware接口执行在初始化阶段之前

50941

Java反射机制

例如它允许一个java类获取他所有的成员变量和方法并且显示出来。这个特定我们不常看到,但是在其他比如C或者C++语言中很不就存在这个特性。...",new Class[]{int.class})这里display是方法名字,有一个参数类型为int Method[] getMethods() 获取所有的公共方法(public)返回是一个数组...类型,需要强制转换 getName() 以字符串形式返回构造方法名称,具体路径包含包名(demo.Test) int getModifiers() 和Class类中方法一样 Method...null,因为静态方法调用不需要对象,返回值是Object类型,如果接受返回值,需要使用强制转换成相应类型,args是传入参数,如果有多个参数,那么可以直接在后面用逗号添加或者直接创建数组new...(new Object[]{1000}); test.display(); 成员方法操作 使用Class.getMethod()和Class.getDeclaredMethod()方法获取方法

1.1K40

全栈必备 Java基础

使用有界通配符,可以为参数类型指定上界和下界,从而能够限制方法能够操作对象类型。最常用是指定有界通配符上界,使用extends子句创建。 对于实现了<?...因为在反射调用中同样要遵循java可见性规约,因此Class.getMethod方法只能查找到该类public方法。...注解就是代码元数据,包含了代码自身信息。 注解可以被用在包,类,方法,变量,参数上。自Java8开始,有一种注解几乎可以被放在代码任何位置,叫做类型注解。...Java反射API包含了许多方法来在运行时从类、方法或者其它元素获取注解手段。...isAnnotationPresent(annotation): 检查传入注解是否存在于当前元素。 getAnnotation(class): 按照传入参数获取指定类型注解。

53440
领券