Java反射:传递整数参数
我正在学习java中的反射,我尝试了一个简单的反射类,但出现了一个异常: java.lang.NoSuchMethodException:it.accaeme.exercises.MaxDiTre.MaxDiTre.absDigit(java.lang.Integer) 有什么建议吗? 谢谢 此处代码: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;
/* /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();
}
}