Java反射:传递整数参数

Java反射:传递整数参数,java,reflection,Java,Reflection,我正在学习java中的反射,我尝试了一个简单的反射类,但出现了一个异常: java.lang.NoSuchMethodException:it.accaeme.exercises.MaxDiTre.MaxDiTre.absDigit(java.lang.Integer) 有什么建议吗? 谢谢 此处代码: /* /src/main/java/.../ */ /* filename: MaxDiTre.java */ package it.accaemme.exercises.MaxDiTre;

我正在学习java中的反射,我尝试了一个简单的反射类,但出现了一个异常:

java.lang.NoSuchMethodException:it.accaeme.exercises.MaxDiTre.MaxDiTre.absDigit(java.lang.Integer)

有什么建议吗? 谢谢

此处代码:

/* /src/main/java/.../ */
/* filename: MaxDiTre.java */

package it.accaemme.exercises.MaxDiTre;

public class MaxDiTre {
    public static int max(int num1, int num2, int num3) {
     /* some stupid stuffs */
   }
    
   private int absDigit(int n) {
       return Math.abs(n);
   }
}
/* ------------ */
public class TestMaxDiTre {
    /*...*/

    // Test16:  class test
    MaxDiTre mdt;
    @Before
    public void AlphaTest() {
        mdt = new MaxDiTre();
    }
    
    // non funziona
    // Test17:  test private method: absDigit()
    @Test
    public void testPrivateMethod_absDigit(){
            Method m;
            try {
                //Class<?> argTypes = new Class() { Integer.class }
                //Class<?> argTypes = Integer.class;
                //Class<?> argTypes = null;
                //@SuppressWarnings("deprecation")
                //Class<int>[] argTypes = null;
                //Class<?>[] argTypes = (Class<?>[]) null;
                //Class<?>[] argTypes = null;
                //int argTypes = (Class<?>[])8;
                //m = MaxDiTre.class.getDeclaredMethod("absDigit", argTypes );
                m = mdt.getClass().getDeclaredMethod("absDigit", argTypes);
                m.setAccessible(true);
                assertEquals(
                         8,
                         (int)m.invoke(
                                        mdt, -8
                                    )
                        );
            } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }
}
/*/src/main/java/…/*/
/*文件名:MaxDiTre.java*/
打包it.accaeme.exercises.MaxDiTre;
公共类MaxDiTre{
公共静态整数最大值(整数m1、整数m2、整数m3){
/*一些愚蠢的东西*/
}
专用整数数字(整数n){
返回Math.abs(n);
}
}
/* ------------ */
公共类TestMaxDiTre{
/*...*/
//Test16:类测试
MaxDiTre mdt;
@以前
公共测试{
mdt=新的MaxDiTre();
}
//非funziona
//Test17:测试私有方法:absDigit()
@试验
public void testPrivateMethod_absDigit(){
方法m;
试一试{
//类argTypes=新类(){Integer.Class}
//类argTypes=Integer.Class;
//类argTypes=null;
//@抑制警告(“弃用”)
//类[]argTypes=null;
//类[]argTypes=(类[])null;
//类[]argTypes=null;
//int argTypes=(Class[])8;
//m=MaxDiTre.class.getDeclaredMethod(“absDigit”,argTypes);
m=mdt.getClass().getDeclaredMethod(“absDigit”,argTypes);
m、 setAccessible(true);
资产质量(
8.
(int)m.invoke(
mdt,-8
)
);
}捕获(NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}

您需要
int.class
。大概

public static void main(String[] args) {
    Class<?> clazz = MaxDiTre.class;
    Method m;
    try {
        m = clazz.getDeclaredMethod("absDigit", int.class);
        m.setAccessible(true);
        System.out.println((int) m.invoke(new MaxDiTre(), -8));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

您需要
int.class
。大概

public static void main(String[] args) {
    Class<?> clazz = MaxDiTre.class;
    Method m;
    try {
        m = clazz.getDeclaredMethod("absDigit", int.class);
        m.setAccessible(true);
        System.out.println((int) m.invoke(new MaxDiTre(), -8));
    } catch (Exception e) {
        e.printStackTrace();
    }
}