日期: 2011.5.27
平台: windows,eclipse,jdk1.6
问题简述: 最近在测试一个类中的私有方法,使用了JUnit-addons包中的PrivateAccessor.invoke方法。
这个方法的签名是invoke(java.lang.Class cls, java.lang.String name, java.lang.Class[] parameterTypes, java.lang.Object[] args).
第一个参数是要调用的类名,第二个参数是调用的私有方法名称。第三个参数是调用方法的参数类型。第四个参数是传入的参数列表。
关键就是第三个参数,需要传入参数的类型。因为int是基本类型,对应的包装类是Integer。所以想当然的传入了Integer.class参数。运行测试的时候,报【java.lang.NoSuchMethodException 】错误。
发生原因: 参数的类型一定要和调用方法的参数类型一致。如果方法的参数类型是基本类型,可以传【基本类型.class】。
解决方案: 将Integer.class修改为int.class后,测试顺利通过。
通过查找api,发现在class类中有如下一段话:基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
引用文章地址或网址:
http://junit-addons.sourceforge.net/
再发防止:无
分享到:
相关推荐
在探讨C#窗体中`Invoke`和`BeginInvoke`方法的使用及其重要性之前,我们首先需要理解.NET框架下的多线程与GUI操作的基本原则,以及为何这两者在跨线程更新GUI时不可或缺。 #### 一、为什么Control类提供了Invoke和...
回调的核心思想是将一个函数作为参数传递给另一个函数,接收方可以在适当的时候调用这个传递的函数。这种方式提高了代码的灵活性和可扩展性,因为调用者不必关心回调函数的具体实现,只需要提供一个符合约定的接口...
- `Invoke`方法接受一个委托对象作为参数,并调用该委托所指向的方法。 - `Invoke`方法确保了控件的访问是在正确的线程中进行的,从而避免了跨线程访问的问题。 #### 四、数据库查询与结果显示 `SelecDB`方法负责...
这个错误通常发生在尝试通过容器设置一个对象属性,但提供的值类型与预期的不匹配时。在这个案例中,问题在于调用`setId`方法时,传递的参数类型不正确。 首先,让我们深入理解这个问题。在Spring框架中,Bean是...
在Java编程中,代理类(Proxy)是一种设计模式,它允许我们为已有对象创建一个代理对象,以便在调用实际对象的方法之前或之后添加额外的功能。`invoke`方法是Java动态代理中的核心方法,它位于`java.lang.reflect....
然后,你可以使用这个类型实例来探索它的成员,甚至在运行时调用它们,这就是Invoke方法的用途。 `Invoke`方法是MethodInfo类的一个成员,它允许我们动态地调用一个方法。以下是一段基本的代码示例: ```csharp ...
`Invoke`方法接受一个委托对象和可选的参数数组,它会将这些参数传递给委托所代表的方法,并在UI线程中执行。如果当前线程已经是UI线程,`Invoke`方法会立即执行;如果不是,则会在UI线程的的消息队列中添加一个消息...
* 一维数组:C#参数在基本类型前加ref或out,out表示有返回数据。例如调用C++的f(float[] a),在C#中,为f(ref a)。 * 数据结构:C++中的struct SAMPLE_DATA { byte SampleID[255]; float Value[6]; } 在C#中对应...
委托在.NET框架中扮演着非常重要的角色,它是类型安全的函数指针,允许我们传递方法作为参数,或者将多个方法连接在一起形成一个事件处理链。本文将深入探讨委托的使用,特别是`Delegate`的`Invoke`方法,以及如何在...
通常,这涉及到创建一个具有适当参数和返回类型的委托,并将其与非托管函数入口点关联起来。P/Invoke.NET工具正是简化这一过程的关键,它能够自动生成这些必要的委托定义和函数调用,避免手动编写繁琐的PInvoke声明...
4. **调用静态方法**:`Method`类的`getDeclaredMethod()`方法可以获取类的静态方法,然后通过`invoke(null, parameters)`来调用它们,其中第一个参数为`null`表示调用静态方法,不需要实例对象。 5. **处理数组**...
在C#编程中,`Invoke`是一个非常关键的概念,尤其在多线程编程中发挥着重要作用。`Invoke`主要用于更新UI(用户界面)控件,因为UI控件通常不是线程安全的,也就是说,它们只能在创建它们的线程中进行修改。这个特性...
注意,如果方法不是静态的,你需要提供一个实例对象作为`invoke()`的第一个参数。 反射虽然强大,但也需要注意其性能开销和安全性问题。在非必要的情况下,应避免过度使用反射。然而,对于需要动态执行代码或者处理...
P/Invoke Interop Assistant是一个非常实用的工具,它专门用于帮助C#或VB.NET开发者将C或C++的函数和数据类型转换为.NET Framework兼容的形式。这个工具的主要目的是解决跨语言互操作性问题,即所谓的“平台调用”...
当你在一个非UI线程中尝试访问或修改UI元素时,必须使用`Invoke`。它会阻塞调用线程,直到UI线程完成指定的委托操作。这样做的好处是可以确保所有UI更新按顺序执行,避免了并发问题,但缺点是可能会导致主线程(UI...
3. **使用Invoke**:`Invoke`方法接收一个`Delegate`类型的参数,这个委托通常是一个指向需要在UI线程上执行的方法的指针。例如,你可以定义一个方法来更新文本框的文本,然后创建一个指向这个方法的委托实例,作为`...
假设我们有一个私有方法`private void myPrivateMethod(int arg)`,那么获取这个方法的代码是`Method privateMethod = myClass.getDeclaredMethod("myPrivateMethod", int.class);`。 3. **设置访问权限**:由于...
Invoke方法的第二个参数是一个Object[],用于存放所有的参数值。参数顺序必须与DLL方法定义中的参数顺序一致。 4. 示例代码: ```csharp // 加载DLL Assembly dllAssembly = Assembly.LoadFrom("path_to_dll"); //...
在声明委托时,我们需要指定它的参数列表和返回类型,使其与要调用的方法相匹配。例如: ```csharp public delegate void MyDelegate(int arg1, string arg2); ``` ### 带参数的方法 在使用Delegate时,我们通常...