[英]Java reflection: passing an integer argument
I'm learning about reflection in java and I tried a simple reflected class, but an exception happened:我正在学习 java 中的反射,我尝试了一个简单的反射 class,但发生了异常:
java.lang.NoSuchMethodException : it.accaemme.exercises.MaxDiTre.MaxDiTre.absDigit(java.lang.Integer) java.lang.NoSuchMethodException :it.accaemme.exercises.MaxDiTre.MaxDiTre.absDigit(java.lang.Integer)
Any suggest?有什么建议吗? Thanks
谢谢
Here code:这里代码:
/* /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();
}
}
}
You want int.class
.你想要
int.class
。 Something like,就像是,
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();
}
}
Outputs输出
8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.