/**
* 测试反射机制
*/import java.lang.reflect.Field;
import java.lang.reflect.Method;public class TestReflect { int f(Object o) throws Exception {
int length = 0;
/* 得到类对象 ,并取得方法 */
Class c = o.getClass();
Object oo = c.newInstance();
Method method = c.getMethod("length", new Class[] {int.class });
method.setAccessible(true);
Object len = method.invoke(oo,
new Object[]{ new Integer(5) });// 利用方法,并调用方法
length = ((Integer)len).intValue();// 软件成整型 return length; } static class Test {
public int length(int i) {
return i * i;
}
} public static void main(String[] args) throws Exception { int len = new TestReflect().f(new Test()); System.out.println(" length长度:" + len);
}}
也就是说static class Test {
public int length(int i) {
return i * i;
}
改成private class Test{
......
}
将无法成功,将报错,我应该如何修改,谢谢!
解决方案 »
- 郁闷,解析xml
- 我的第一个程序问题啊,高手帮忙啊
- Swing和Swt那个跟具有长远的发展前景
- 关于JAVA的byte字节流
- 菜鸟才学java 求助高手麻烦解答下
- 如何成为Java高手----献给所有初学者!--好贴就up啊(转)
- jbuilder的gui designer 是如何做的?
- jtable显示图片的问题?
- Java的Socket如何穿越代理?
- 救命啊!哪里有TowerJ 可以下载啊!各位大虾出手呀!
- 100分求SCJP 1.4(310-025,SL-275) 中文题库
- The static field DBmysql.getline should be accessed in a static way
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;public class TestReflect
{ int f(Object o) throws Exception
{
int length = 0;
/* 得到类对象 ,并取得方法 */
Class c = o.getClass();
Constructor con = c.getDeclaredConstructor();
con.setAccessible(true);
Object oo = con.newInstance();//c.newInstance();
Method method = c.getMethod("length", new Class[] { int.class });
method.setAccessible(true);
Object len = method.invoke(oo, new Object[] { new Integer(5) });// 利用方法,并调用方法 length = ((Integer) len).intValue();// 软件成整型 return length; } private static class Test
{
public int length(int i)
{
return i * i;
}
} public static void main(String[] args) throws Exception
{ int len = new TestReflect().f(new Test()); System.out.println(" length长度:" + len);
}}
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.Class.newInstance0(Class.java:349)
at java.lang.Class.newInstance(Class.java:308)
at com.songbx.test.TestReflect.f(TestReflect.java:12)
at com.songbx.test.TestReflect.main(TestReflect.java:31)应该是2楼说的问题
[code=Java]
int f() throws Exception
{
int length = 0;
/* 得到类对象 ,并取得方法 */
Class c = getClass();
Object o1=c.newInstance();
Class[] ss = c.getDeclaredClasses();
for (Class s : ss)
{
Constructor con = s.getDeclaredConstructor(new Class[]{c});
Object inner = con.newInstance(o1);
Method method = s.getMethod("length", new Class[] { int.class });
Object len = method.invoke(inner, new Object[] { new Integer(10) });// 利用方法,并调用方法
length = ((Integer) len).intValue();// 软件成整型
}
return length;
}code]