相关疑难解决方法(0)

Java:运行时方法解析

我正在通过解释器进行一些动态的代码调用,而我正在进入JLS第15.12节中讨论的方法解决的粘性丑陋区域.

选择方法的"简单"方法是,当您知道所有参数的确切类型时,您可以使用该方法Class.getDeclaredMethod(String name, Class[] parameterTypes).也许您必须检查方法可访问性和类的超类/超级接口.

但这并不包括以下任何一种情况,所以它有点无用:

  • 装箱/拆箱原语
  • 亚型
  • 可变参数
  • 一个null参数(可以是任何类型,除非解释器另有说明;在编译时,任何歧义都会通过将null转换为类/接口来消除)
  • 原始类型转换(不是Java的一部分,但在语言环境中是允许的 - 例如Rhino Javascript,其中所有数字都是浮点数,因此Java代码可能需要一个int但调用者传入的数字是a int或a 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... */ }
    public void compute(String... strings)  { /* implementation... */ }

    public static void main(String[] args) {
        Class<?> cl = …
Run Code Online (Sandbox Code Playgroud)

java reflection overload-resolution

15
推荐指数
1
解决办法
2059
查看次数

标签 统计

java ×1

overload-resolution ×1

reflection ×1