gpt4 book ai didi

Java:运行时方法解析

转载 作者:太空狗 更新时间:2023-10-29 22:58:17 25 4
gpt4 key购买 nike

我正在通过解释器进行代码的一些动态调用,并且我正在进入方法解析的棘手丑陋区域,如 JLS section 15.12 中所讨论的那样。 .

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

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

  • 装箱/拆箱原语
  • 亚型
  • 可变参数
  • 一个 null 参数(可以是任何类型,除非解释器另有所知;在编译时,通过将 null 转换为类/接口(interface)可以消除任何歧义)
  • 原始类型转换(不是 Java 的一部分,但在语言上下文中是允许的——例如 Rhino Javascript,其中所有数字都是 float ,因此 Java 代码可能采用 int 但调用者传入一个 intdouble 的数字)

(请参阅下面的前三个示例)

所以现在我必须编写自己的方法解析库...

是否有任何著名的框架库可以协助完成此操作?

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 = MethodResolutionTest.class;

/* these succeed */
findAndPrintMethod(cl, "compute", int.class);
findAndPrintMethod(cl, "compute", Long.class);
findAndPrintMethod(cl, "compute", Object.class);
findAndPrintMethod(cl, "compute", String[].class);

/* these fail */
findAndPrintMethod(cl, "compute", Integer.class);
findAndPrintMethod(cl, "compute", long.class);
findAndPrintMethod(cl, "compute", MethodResolutionTest.class);
findAndPrintMethod(cl, "compute", String.class, String.class);
}
private static void findAndPrintMethod(Class<?> objectClass,
String methodName, Class<?>... parameterTypes)
{
try {
Method method = findMethod(objectClass, methodName,
parameterTypes);
System.out.println(method.toString());
}
catch (SecurityException e) {
e.printStackTrace();
}
catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
private static Method findMethod(Class<?> objectClass,
String methodName, Class<?>[] parameterTypes)
throws SecurityException, NoSuchMethodException
{
return objectClass.getDeclaredMethod(methodName, parameterTypes);
}
}

最佳答案

您可能想阅读 this blog post并查看 ClassMate .它应该为您完成大部分低级工作。

关于Java:运行时方法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com