Tag: 重载决议

Java:运行时方法解析

我正在通过解释器进行一些动态的代码调用,我正在进入JLS第15.12节中讨论的方法解决的粘性丑陋区域。 选择方法的“简单”方法是,当您知道所有参数的确切类型时,您可以使用Class.getDeclaredMethod(String name, Class[] parameterTypes) 。 也许你必须检查方法可访问性和类的超类/超接口。 但这并不包括以下任何一种情况,所以它有点无用: 装箱/拆箱原语 亚型 可变参数 一个null参数(可以是任何类型,除非解释器另有说明;在编译时,任何歧义都会通过将null转换为类/接口来消除) 原始类型转换(不是Java的一部分,但在语言环境中是允许的 – 例如Rhino Javascript,其中所有数字都是浮点数,因此Java代码可能需要一个int但调用者传入的数字是int或者double ) (见下面的前三个快速示例) 所以现在我必须编写自己的方法解析库… 有没有任何着名的框架库来协助这个? package com.example.test.reflect; import java.lang.reflect.Method; public class MethodResolutionTest { public void compute(int i) { /* implementation… */ } public void compute(Long l) { /* implementation… */ } public void compute(Object obj) { /* implementation… */ } […]