反射出类的属性和方法的参数 rt, 获取信息后可以用来生产文档,这是一个不错的主意, 有没有谁做过?刚试了下,有点问题!谁有做过给我发一份代码吧!thank you! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java核心技术I卷 讲继承的那一张,里面有一小节讲了反射, 里面我记得有一个很详细的例子,就是根据一个类名,生成一个Class, 就像编译那样... 楼主可以自己去看看,别动不动就来要代码。 反射出属性好办 ,相信楼主没问题反射出方法,就得到Method对象,然后查查API里面有getParameterTypes() 方法 ,获得参数类型 要是做javadoc toGenericString()方法特别爽,能将你整个方法的声明作为字符串返回,再处理字符串,就能得到整个方法你想要的部分 以下是我写的,但是获取私有属性的时候出问题了,请教package pk.main;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import pk.test.TestClass;public class InfoGetter { public static void main(String[] args) { Class<?> testClass = null; try { testClass = Class.forName("pk.test.TestClass"); } catch (ClassNotFoundException e) { System.out.println("ERROR"); return; } TestClass testClassImpl = new TestClass(); printlnFields(testClassImpl); printlnMethods(testClass.getDeclaredMethods()); } private static void printlnFields(TestClass testClassImpl) { for (Field field : testClassImpl.getClass().getDeclaredFields()) { System.out.println("Field : " + field.getName()); System.out .println(" " + Modifier.toString(field.getModifiers())); try { System.out.println(field.get(testClassImpl)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } private static void printlnMethods(Method[] methods) { for (Method method : methods) { System.out.println("Method : " + method.getName()); System.out.println(" " + Modifier.toString(method.getModifiers())); } }}package pk.test;public class TestClass { int nor0; int nor1 = 0; private int pri0; private int pri1 = 0; public int pub0; public int pub1 = 0; public static void main(String[] args) { } private void norFoo0() { } public void norFoo1() { }} 私有属性必须要setAccessible(true); 否则看不到的,早贴代码不就解决了么 试了下,确实是这个问题,就是想问下,有没有更好的代码啊?看我自己的代码感觉和helloworld似地 //print methods of a class public static void printMethods(Class<?> clazz){ java.lang.reflect.Method methods[]=clazz.getDeclaredMethods(); for(java.lang.reflect.Method method : methods){ method.setAccessible(true); StringBuilder sb=new StringBuilder(); int mod = method.getModifiers(); String modifier = Modifier.toString(mod); sb.append(modifier);//modifier sb.append(" "); sb.append(method.getReturnType().getName());//return type sb.append(" "); sb.append(method.getName()); //method name sb.append("("); Class<?> paramsClazz[]=method.getParameterTypes();//parameter type for(Class<?> paramClazz : paramsClazz){ sb.append(paramClazz.getName()); sb.append(","); } if(paramsClazz.length>0)sb.deleteCharAt(sb.length()-1); sb.append(")"); Class<?>[] clazzExceptions = method.getExceptionTypes();//Exception type if(clazzExceptions.length>0)sb.append(" throws "); for(Class<?> clazzException : clazzExceptions){ sb.append(clazzException.getName()); sb.append(","); } if(clazzExceptions.length>0)sb.deleteCharAt(sb.length()-1); System.out.println(sb); } } //print fields of a class public static void printFields(Class<?> clazz){ java.lang.reflect.Field fields[] = clazz.getDeclaredFields(); for(java.lang.reflect.Field field : fields){ field.setAccessible(true); int mod = field.getModifiers(); String modifier = java.lang.reflect.Modifier.toString(mod); String filedName = field.getName(); String type = field.getType().getName(); System.out.println(modifier +" "+ type +" "+filedName); } } helloword可是程序界的经典代码,............. 楼主想得到什么样的文档? API 吗,用 jdk 中带的javadoc.exe就可以了啊 这个不错,我看了下api,貌似注释也可以获取到的嘛,下次我试试 多线程start问题 有谁对普元系统属性的不? java的抽象类 DEBUG问题 如何设置 AWT 的 java.awt.Menu 的快捷键? 简单Java代码找错 产生随机数并比较大小 关于Java Swing JTable 生成表格形式的问题,望高手告知! 学着写了一个buttonEvent的例子,有两个地方不明白,请指点一下。谢谢。 javamail的问题!很简单(在线) “serializable 类 Execise 未声明类型为 long 的静态终态 serialVersionUID 字段”什么意思? 急问!!websphere上 能编译java吗?
反射出方法,就得到Method对象,然后查查API里面有getParameterTypes() 方法 ,获得参数类型
package pk.main;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;import pk.test.TestClass;public class InfoGetter { public static void main(String[] args) {
Class<?> testClass = null;
try {
testClass = Class.forName("pk.test.TestClass");
} catch (ClassNotFoundException e) {
System.out.println("ERROR");
return;
} TestClass testClassImpl = new TestClass();
printlnFields(testClassImpl);
printlnMethods(testClass.getDeclaredMethods());
} private static void printlnFields(TestClass testClassImpl) {
for (Field field : testClassImpl.getClass().getDeclaredFields()) {
System.out.println("Field : " + field.getName());
System.out
.println(" " + Modifier.toString(field.getModifiers()));
try {
System.out.println(field.get(testClassImpl));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
} private static void printlnMethods(Method[] methods) {
for (Method method : methods) {
System.out.println("Method : " + method.getName());
System.out.println(" "
+ Modifier.toString(method.getModifiers()));
}
}
}package pk.test;public class TestClass {
int nor0;
int nor1 = 0;
private int pri0;
private int pri1 = 0;
public int pub0;
public int pub1 = 0; public static void main(String[] args) { } private void norFoo0() { }
public void norFoo1() { }
}
看我自己的代码感觉和helloworld似地
//print methods of a class
public static void printMethods(Class<?> clazz){
java.lang.reflect.Method methods[]=clazz.getDeclaredMethods();
for(java.lang.reflect.Method method : methods){
method.setAccessible(true);
StringBuilder sb=new StringBuilder();
int mod = method.getModifiers();
String modifier = Modifier.toString(mod);
sb.append(modifier);//modifier
sb.append(" ");
sb.append(method.getReturnType().getName());//return type
sb.append(" ");
sb.append(method.getName()); //method name
sb.append("(");
Class<?> paramsClazz[]=method.getParameterTypes();//parameter type
for(Class<?> paramClazz : paramsClazz){
sb.append(paramClazz.getName());
sb.append(",");
}
if(paramsClazz.length>0)sb.deleteCharAt(sb.length()-1);
sb.append(")");
Class<?>[] clazzExceptions = method.getExceptionTypes();//Exception type
if(clazzExceptions.length>0)sb.append(" throws ");
for(Class<?> clazzException : clazzExceptions){
sb.append(clazzException.getName());
sb.append(",");
}
if(clazzExceptions.length>0)sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
}
}
//print fields of a class
public static void printFields(Class<?> clazz){
java.lang.reflect.Field fields[] = clazz.getDeclaredFields();
for(java.lang.reflect.Field field : fields){
field.setAccessible(true);
int mod = field.getModifiers();
String modifier = java.lang.reflect.Modifier.toString(mod);
String filedName = field.getName();
String type = field.getType().getName();
System.out.println(modifier +" "+ type +" "+filedName);
}
}
helloword可是程序界的经典代码,.............