如何获得JAVA源文件的属性及类型 请问有谁知道如何解析JAVA源文件的?读取该文件把属性、属性类型、方法等信息取出来急救!已知的是ECLIPSE下JDT库中有方法可以解决,但怎么找都找不到如何使用平台:ECLIPSE3.2,JDK1.5 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用反射,输入该对象的全路径带包名和类名。这样就可以取出该类的所有属性和方法拉。//有数据的bean package utilbeans; public class UtilsBeansOne { public UtilsBeansOne() { } public String getPassword() { return password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public void setPassword(String password) { this.password = password; } private String userName = "张三"; private String password = "123456"; } ////////////////////////////////////////// 没有数据的bean package utilbeans; public class UtilsBeansTwo { public UtilsBeansTwo() { } public String getPassword() { return password; } public String getUserName() { return userName; } public void setUserName(String userName) { System.out.println(userName); this.userName = userName; } public void setPassword(String password) { System.out.println(password); this.password = password; } private String userName = null; private String password = null; } /////////////////////////////////////////// 具体的填充方法 package utilbeans; import java.lang.reflect.Method; import java.lang.reflect.*; public class UtilsBeansTest { public UtilsBeansTest() { } /** * 此功能为将第一个对象的内容填充到第二个对象中 * @param oneObject String 内容已经存在的对象 * @param twoObject String 要填充的对象 */ public static Object utilBean(String oneObject, String twoObject) { Class utilOneClass = null; Class utilTwoClass = null; try { //将字符串转化为Class对象 utilOneClass = Class.forName(oneObject); utilTwoClass = Class.forName(twoObject); } catch (ClassNotFoundException ex) { System.out.println(ex.toString()); return null; } Object objUtilBeanOne = null; Object objUtileBeanTwo = null; try { //创建对象实例 objUtilBeanOne = utilOneClass.newInstance(); objUtileBeanTwo = utilTwoClass.newInstance(); } catch (IllegalAccessException ex1) { System.out.println(ex1.toString()); return null; } catch (InstantiationException ex1) { System.out.println(ex1.toString()); return null; } //获得对象的所有方法; Method[] oneMethod = utilOneClass.getDeclaredMethods(); Method[] twoMethod = utilTwoClass.getDeclaredMethods(); Method oneBeanMethod = null; Method twoBeanMethod = null; //循环所有方法 for (int oneIndex = 0; oneIndex < oneMethod.length; oneIndex++) { oneBeanMethod = oneMethod[oneIndex]; String oneMethodName = oneBeanMethod.getName(); //判断是否为get方法 if (oneMethodName.indexOf("get") > -1) { for (int twoIndex = 0; twoIndex < twoMethod.length; twoIndex++) { twoBeanMethod = twoMethod[twoIndex]; //获得方法名 String towMethodName = twoBeanMethod.getName(); String oneName = oneMethodName.substring(oneMethodName. indexOf("get") + 3); String twoName = towMethodName.substring(towMethodName. indexOf("set") + 3); //判断去掉get/set后的方法名是否相同 if (oneName.equals(twoName)) { try { //获得第一个bean的值 String oneAttrValuedd = oneBeanMethod.invoke( objUtilBeanOne, null).toString(); //将从第一个bean中取出的值,填充到第二个bean中 Object[] obj = {oneAttrValuedd}; //将obj内容填充到objUtileBeanTwo对象的twoBeanMethod方法中 twoBeanMethod.invoke( objUtileBeanTwo, obj); } catch (InvocationTargetException ex2) { System.out.println(ex2.toString()); return null; } catch (IllegalArgumentException ex2) { ex2.printStackTrace(); return null; } catch (IllegalAccessException ex2) { System.out.println(ex2.toString()); return null; } } } } } return objUtileBeanTwo; } public static void main(String[] args) { //bean填充前 UtilsBeansTwo utitlBean = new UtilsBeansTwo(); System.out.println("username : " + utitlBean.getUserName()); System.out.println("password : " + utitlBean.getPassword()); UtilsBeansTwo utitlBeanAfter = (UtilsBeansTwo)utilBean("utilbeans.UtilsBeansOne", "utilbeans.UtilsBeansTwo"); System.out.println("---------------------------------------------"); //bean填充后 System.out.println("username : " + utitlBeanAfter.getUserName()); System.out.println("password : " + utitlBeanAfter.getPassword()); } } 谢谢!!!明白啦。不过有没有效率高的?我现在有几百个文件的话就要反射几百次,创建几百个对象,跑得好慢。我想,既然已经知道源文件了有没有可以直接读取JAVA源文件而不用反射的方法,这样效率会比反射高很多。 基础问题 数组的内存 使用log查看不到想要的输出,怎么办? 我初学Java,编了个程序,运行不了,求助!!! 如何实现接受用户通过文本输入绘图? 急死了! 求助!!log文件中数据去重统计问题 怎样像关闭tomcat一样关闭一个java程序?跪求解答! 如何测二维数组列的下标? java程序执行的小问题 求助怎么调用ImagePanel让本地图片显示在panel里 在JComboBox中加图片 如何做到当鼠标移动到输入框的时候,里头的字就自动被选择?
这样就可以取出该类的所有属性和方法拉。//有数据的bean
package utilbeans; public class UtilsBeansOne {
public UtilsBeansOne() {
}
public String getPassword() {
return password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassword(String password) {
this.password = password;
}
private String userName = "张三";
private String password = "123456";
}
//////////////////////////////////////////
没有数据的bean
package utilbeans; public class UtilsBeansTwo {
public UtilsBeansTwo() {
}
public String getPassword() {
return password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
System.out.println(userName);
this.userName = userName;
}
public void setPassword(String password) {
System.out.println(password);
this.password = password;
}
private String userName = null;
private String password = null;
}
///////////////////////////////////////////
具体的填充方法
package utilbeans;
import java.lang.reflect.Method;
import java.lang.reflect.*;
public class UtilsBeansTest {
public UtilsBeansTest() {
}
/**
* 此功能为将第一个对象的内容填充到第二个对象中
* @param oneObject String 内容已经存在的对象
* @param twoObject String 要填充的对象
*/
public static Object utilBean(String oneObject, String twoObject) {
Class utilOneClass = null;
Class utilTwoClass = null;
try {
//将字符串转化为Class对象
utilOneClass = Class.forName(oneObject);
utilTwoClass = Class.forName(twoObject);
} catch (ClassNotFoundException ex) {
System.out.println(ex.toString());
return null;
}
Object objUtilBeanOne = null;
Object objUtileBeanTwo = null;
try {
//创建对象实例
objUtilBeanOne = utilOneClass.newInstance();
objUtileBeanTwo = utilTwoClass.newInstance();
} catch (IllegalAccessException ex1) {
System.out.println(ex1.toString());
return null;
} catch (InstantiationException ex1) {
System.out.println(ex1.toString());
return null;
}
//获得对象的所有方法;
Method[] oneMethod = utilOneClass.getDeclaredMethods();
Method[] twoMethod = utilTwoClass.getDeclaredMethods();
Method oneBeanMethod = null;
Method twoBeanMethod = null;
//循环所有方法
for (int oneIndex = 0; oneIndex < oneMethod.length; oneIndex++) {
oneBeanMethod = oneMethod[oneIndex];
String oneMethodName = oneBeanMethod.getName();
//判断是否为get方法
if (oneMethodName.indexOf("get") > -1) {
for (int twoIndex = 0; twoIndex < twoMethod.length; twoIndex++) {
twoBeanMethod = twoMethod[twoIndex];
//获得方法名
String towMethodName = twoBeanMethod.getName();
String oneName = oneMethodName.substring(oneMethodName.
indexOf("get") + 3);
String twoName = towMethodName.substring(towMethodName.
indexOf("set") + 3);
//判断去掉get/set后的方法名是否相同
if (oneName.equals(twoName)) {
try {
//获得第一个bean的值
String oneAttrValuedd = oneBeanMethod.invoke(
objUtilBeanOne, null).toString();
//将从第一个bean中取出的值,填充到第二个bean中
Object[] obj = {oneAttrValuedd};
//将obj内容填充到objUtileBeanTwo对象的twoBeanMethod方法中
twoBeanMethod.invoke(
objUtileBeanTwo, obj);
} catch (InvocationTargetException ex2) {
System.out.println(ex2.toString());
return null;
} catch (IllegalArgumentException ex2) {
ex2.printStackTrace();
return null;
} catch (IllegalAccessException ex2) {
System.out.println(ex2.toString());
return null;
}
}
}
}
}
return objUtileBeanTwo;
}
public static void main(String[] args) {
//bean填充前
UtilsBeansTwo utitlBean = new UtilsBeansTwo();
System.out.println("username : " + utitlBean.getUserName());
System.out.println("password : " + utitlBean.getPassword());
UtilsBeansTwo utitlBeanAfter = (UtilsBeansTwo)utilBean("utilbeans.UtilsBeansOne", "utilbeans.UtilsBeansTwo");
System.out.println("---------------------------------------------");
//bean填充后
System.out.println("username : " + utitlBeanAfter.getUserName());
System.out.println("password : " + utitlBeanAfter.getPassword());
}
}
不过有没有效率高的?我现在有几百个文件的话就要反射几百次,创建几百个对象,跑得好慢。
我想,既然已经知道源文件了有没有可以直接读取JAVA源文件而不用反射的方法,这样效率会比反射高很多。