Java反射带参数的私有方法最好的方法是什么?

2024-03-01

我正在尝试使用java反射调用私有方法我开发了一个小方法来调用其他方法迭代所有方法并按名称和参数类型进行比较我已成功调用4个方法。

我有一个问题。

1)。这是最好的方法吗?因为我知道 class.getMethod 仅匹配公共方法。 Java有内置的东西吗?

这是我的代码。

public class Compute 
{   
   private Method getMethod(Class clazz,String methodName,Class...parametersClass)
   {   
      outer:     
      Method[] methods = clazz.getDeclaredMethods();        
      for(Method method:methods)
    {       
        //comparing the method types... of the requested method and the real method.....                  
        if(method.getName().equals(methodName) && parametersClass.length== method.getParameterTypes().length)//it a possible match
        {                
            Class[]arrayForRealParameters = method.getParameterTypes();
            //comparing the method types... of the requested method and the real method.....    
            for(int i=0;i<arrayForRealParameters.length;i++)if(!arrayForRealParameters[i].getSimpleName().equals(parametersClass[i].getSimpleName()))continue outer;
            return method;
        }
    }
    return null;    
}
private Calendar getCalendar(){return java.util.Calendar.getInstance();}
private void methodByReflex(){System.out.println("Empty Parameters.");}
private void methodByReflex(Integer a,Integer b){System.out.println(a*b);}
private void methodByReflex(String a,String b){System.out.println(a.concat(b));}
public static void main(String[] args) throws Exception
{
    Compute clazz = new Compute();
    Class[]arrayOfEmptyClasses=new Class[]{};
    Class[]arrayOfIntegerClasses=new Class[]{Integer.class,Integer.class};
    Class[]arrayOfStringClasses=new Class[]{String.class,String.class};
    Method calendarMethod=clazz.getMethod(clazz.getClass(),"getCalendar",arrayOfEmptyClasses);
    Method emptyMethod=clazz.getMethod(clazz.getClass(),"methodByReflex",arrayOfEmptyClasses);
    Method intMethod=clazz.getMethod(clazz.getClass(),"methodByReflex",arrayOfIntegerClasses);
    Method stringMethod=clazz.getMethod(clazz.getClass(),"methodByReflex",arrayOfStringClasses);        
    System.out.println((calendarMethod==null)+" "+(emptyMethod==null)+" "+(intMethod==null)+" "+(stringMethod==null));//prints false false false false
    Calendar cal = (Calendar)calendarMethod.invoke(clazz);
    System.out.println(cal.getTime());//prints current time
    stringMethod.invoke(clazz,"John ","Lennon");//Prints John Lennon
    emptyMethod.invoke(clazz);//prints Empty Parameters.
    intMethod.invoke(clazz,13,13);// prints 169
    Integer a=10,b=10;
    intMethod.invoke(clazz,a,b);//prints 100
}

}

任何帮助都是感激的。 多谢。


您将获得一个类中所有方法的列表getDeclaredMethods。尝试使用getDeclaredMethod http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredMethod%28java.lang.String,%20java.lang.Class...%29(单数)方法,它将方法名称和参数类型的类的 varargs 参数作为参数。这应该可以让您直接访问该方法,这样您就不必自己迭代所有方法。

Example:

clazz.getDeclaredMethod(methodName, parametersClass);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java反射带参数的私有方法最好的方法是什么? 的相关文章

随机推荐

  • 使用 @PreUpdate 的问题

    我有以下课程 MappedSuperclass public abstract class MappedModel Id GeneratedValue strategy GenerationType AUTO Column name id
  • 引用另一个矩阵后,numpy.ones 的第一行仍然被填充

    我有一个矩阵 A 其值如下所示 使用 numpy ones 创建矩阵 B 并通过索引 i 行和 j 列将值从 A 分配到 B 后 生成的 B 矩阵保留第一行 1 来自原始的 B 矩阵 我不确定为什么下面提供的代码会发生这种情况 命令行生成的
  • 如何以编程方式将单击事件分配给以编程方式创建的项目符号列表?

    我尝试以编程方式编写一个方法并将其分配为 onclick 事件调用的方法 但有些地方不对 该方法未被调用 BulletedList bulletList new BulletedList 我使用将项目添加到项目符号列表中bulletList
  • 为什么我的 ' 字符在发布到我的服务器时变成了 \'?

    我对HTML不是很强 每次都会遇到一些编码问题 在这里 我有一个类似的表格
  • 如何给子类提供静态字段?

    我有一个名为 operation java 的抽象超类和几个扩展该类并表示操作的子类 每个这样的子类应该包含一个规范化内容的数组 该数组应该是静态的 因为它全局保存 我有以下示例 abstract class Operation priva
  • Python继承:将所有参数从基类传递到超类

    我还不太习惯 Python 中的类继承 我想要做的只是在创建超类时将所有参数从基类传递给超类 class A def init self a b self a a self b b def do self c self a self b r
  • HTML 拖放 - 如何设置*传出*拖放(到桌面)的文件名

    我试图让用户可以将图标从网络浏览器拖动到桌面 并创建一个文本文件 我已经记下了内容部分 但我不知道如何设置文件名 我尝试过变异dataTransfer files但这是只读的 我不知道如何实现这一目标 class CrashReport e
  • 在 JMeter 的 BeanShell Sampler 中将字符串解析为整数

    我试图在 JMeter 中将字符串解析为整数 但由于以下错误而失败 如果我尝试打印 vars get 返回的字符串 它们看起来不错 2014 06 28 00 08 52 WARN jmeter assertions BeanShellAs
  • Hibernate:为什么使用或不使用类似天气的字段绑定显式@JoinColum注释?

    Is JoinColum当我们使用任何关联类型注释时隐式指定 例如 OneToOne OneToMany etc 这是摘自Student实体与Laptop实体 情况1 不使用显式 JoinColum OneToMany cascade Ca
  • boost::thread::id 的 tr1::hash 吗?

    我开始使用unordered set类来自tr1命名空间以加速对普通 基于树 STL 的访问map 但是 我想在 boost 中存储对线程 ID 的引用 boost thread id 并意识到这些标识符的 API 非常不透明 以至于您无法
  • 如何锁定和解锁 SQL SERVER 表?

    冒着过度解释我的问题的风险 我会错误地提供太多信息 我正在创建一个批量上传过程 将数据插入两个表中 这两个表大致如下所示 TableA是一个自引用表 允许 N 级引用 Parts self referencing table PartId
  • 语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,期望 T_STRING 或 T_VARIABLE 或 T_NUM_STRING [重复]

    这个问题在这里已经有答案了 我已经盯着这个代码几个小时了 我不知道我的错误在哪里 我知道这种语法错误通常是由于缺少或不合适的大括号或单 双引号的一些问题而出现的 而且我不确定我的代码中是否存在这样的错误 我现在只是想修复我的语法 以便我可以
  • 模板部分专业化 - 有现实世界的例子吗?

    我正在思考partial specialization 虽然我理解这个想法 但我还没有看到这种技术在现实世界中的任何用法 Full specialization被用在很多地方STL所以我对此没有问题 你能告诉我一个现实世界的例子吗 part
  • 在 Mercurial 中进行合并时忽略空格

    在 Mercurial 中进行合并时 我们遇到了一个问题 其中空白更改会导致合并冲突 从而掩盖了我们可能遇到的任何 真实 冲突 并使合并成为一场噩梦 我们最近遵循了一种格式样式 该样式更改了某些分支中文件的缩进 并且从那时起合并几乎变得不可
  • 如何在Java字符类中表示空字符

    我想在 Java 中将空字符表示为 在字符串中 像那样char ch an empty character 其实我想替换一个字符而不留空格 我认为理解这意味着什么就足够了 没有字符 甚至没有空间 您可以分配 u0000 或 0 为此 请使用
  • 使用对话框框架的 primefaces 对话框未弹出

    我正在尝试使用 primefaces 对话框框架来简化我的代码 我已经按照 primefaces 4 0 用户指南中的示例进行操作 但它不起作用 我几乎逐字复制了该示例 创建了三个文件 一个包含对话框的文件 一个调用对话框的文件和一个支持
  • 在 R 中的命名空间中导入有什么好处?

    R 的命名空间机制允许人们export然后对用户可见的功能 此外 它还允许import来自其他包的函数 虽然出口的好处是显而易见的 但我在理解进口的好处时遇到了更多问题 一个好处似乎是 可以使用其他包中的功能 而无需附加包 从而节省内存 这
  • Objective-C/iOS:在后台保持蓝牙连接处于活动状态

    我已经研究了几天了 看起来当手机进入睡眠状态或应用程序在后台时 不可能保持蓝牙连接 然而 我发现一个应用程序声称它们可以一直运行 运行守护者应用程序 http itunes apple com ca app runkeeper id3002
  • jsPDF with Cordova - 添加图像

    我正在尝试使用 jsPDF 库生成 PDF https github com MrRio jsPDF https github com MrRio jsPDF 从移动 Cordova 应用程序中 我目前正在 Android 4 0 4 设备
  • Java反射带参数的私有方法最好的方法是什么?

    我正在尝试使用java反射调用私有方法我开发了一个小方法来调用其他方法迭代所有方法并按名称和参数类型进行比较我已成功调用4个方法 我有一个问题 1 这是最好的方法吗 因为我知道 class getMethod 仅匹配公共方法 Java有内置