当前位置: 首页 > 知识库问答 >
问题:

通过反射调用具有Class类型参数的私有方法

陈实
2023-03-14

我有一个方法如下:

private <T> T _findEntity(Class<T> klass, Object entityId) {
    ...
}

为了通过反射调用此函数,我尝试了以下代码段,但结果不成功:

Method method = GenericPersistenceManager.class.getDeclaredMethod("_findEntity", Object.class, Object.class);
method.setAccessible(true);
Player player = (Player) method.invoke(genericPersistenceManager, Player.class, "str");

那么,有没有一种方法可以通过Java反射调用像findEntity这样的方法?

谢谢

共有2个答案

伍皓
2023-03-14

将通话改为

Method method = GenericPersistenceManager.class.getDeclaredMethod("_findEntity", Class.class, Object.class);
井誉
2023-03-14

您正在搜索错误的方法。您的方法采用类型为-ClassObject的两个参数。您正在搜索将Object作为两个参数的方法。

您应该将第二个参数更改为类。类:

Method method = GenericPersistenceManager.class.getDeclaredMethod("_findEntity", 
                                                     Class.class, Object.class);
 类似资料:
  • 虽然知道使用反射不是一种好的测试方法,但我正在尝试测试我的代码。我有一个外部类作为public,有一个私有的内部类和一个公共方法,如下所示, 我的主要java类如下所示 这是投掷 线程“main”java中出现异常。lang.NoSuchMethodException:汽车。外部$内部。java上的test()。lang.Class。car上的getDeclaredMethod(Class.jav

  • 我正在使用mockito并使用java6和Spring进行开发。

  • 大家好,我正在使用Java反射来调用方法,并将参数传递给这些方法。下面是示例代码 用于调用方法的一段代码 其中test=“method1”/“method2”/“method3” obj是基类的对象 上面的代码抛出的是NOSuchmethodException

  • 我知道我们可以通过反射访问私有构造函数,就像@Sanjay T.Sharma在回答我的问题时提到的:“instanceof void”总是返回false吗? 不过,@Duffymo表示: 您可以使用反射访问私有的所有东西--方法、构造函数、数据成员、所有东西。 如何访问私有方法和私有数据成员? 是否可以通过反射访问局部变量? 是否有方法防止任何人访问私有构造函数、方法和数据成员?

  • 问题内容: 我试图通过反射获取静态私有属性的值,但失败并显示错误。 我得到的异常是: 而且,我需要使用以下代码来调用一个私有的。 但是问题是Student类是单例类,并且构造函数是私有的,并且无法访问。 问题答案: 您可以将字段设置为可访问:

  • 问题内容: 我的测试框架中有一个方法可以创建类的实例,具体取决于传入的参数: 问题是,如果构造函数具有基本类型,则这将不起作用,如下所示: 结果是: 原始int会自动装箱到对象版本中,但是如何返回它们以调用构造函数? 问题答案: 使用代替。 根据Javadocs,这是“表示原始类型的Class实例”。 您也可以使用。这是的快捷方式。不仅是类,甚至对于原始类型,您都可以用Java表示。