java反射机制,求帮助! 我有一个功能,页面比较复杂,有一个地方据说用java反射比较好,但是我没用过,所以请大家给我讲讲java反射是怎么一回事,另求java反射经典代码,求学习 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 说起来他复杂了,lz可以看看这个http://apps.hi.baidu.com/share/detail/24992875,很不错的 这个自认为很全了,不知意下如何?import java.io.FileInputStream;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.Properties;public class ReflectFactory{ private static final String FILENAME = "reflect.ini"; private Properties prop; private Map<String, String> objTool = new HashMap<String, String>(); /** * 初始化 读取配置文件 */ public void init() { prop = new Properties(); try { prop.load(new FileInputStream(FILENAME)); Enumeration<?> keys = prop.keys(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String value = prop.getProperty(key); objTool.put(key, value); } }catch (Exception e) { System.out.println("读配置文件异常"); } } /** * 根据类名(完整包名)创建实例 * @param className * @return 类的实例 */ private Object createObject(String className) { try { System.out.println(className); Class<?> clazz = Class.forName(className); return clazz.newInstance(); }catch (Exception e) { System.out.println("创建类的实例异常"); } return null; } /** * 根据 类名、方法名 调用相应的方法 * @param cName * @param mtdName * @param params */ public void invokeMethod(String cName, String mtdName, Object[] params) { String className = objTool.get(cName); Object target = createObject(className); Class<?> targetClass = target.getClass(); int length = params.length; Class<?>[] paramTypes = new Class<?>[length]; for (int i = 0; i < length; i++) { paramTypes[i] = params[i].getClass(); } try { Method method = targetClass.getMethod(mtdName, paramTypes); method.invoke(target, params); }catch (Exception e) { System.out.println("执行异常"); } } /** * 反射显示 类 的内容(属性、方法) * @param cName 类名 */ public void showClass(String cName) { StringBuffer sbuf = new StringBuffer(1024); String className = objTool.get(cName); Object target = createObject(className); Class<?> targetClass = target.getClass(); sbuf.append("类名:"); sbuf.append(className); sbuf.append("\n\n"); sbuf.append(Modifier.toString(targetClass.getModifiers())); sbuf.append(" class "); sbuf.append(cName); sbuf.append("\n{\n"); writeFiels(sbuf, targetClass); writeConstructor(sbuf, targetClass); writeMethods(sbuf, targetClass); sbuf.append("}"); System.out.println(sbuf.toString()); } /** * 获取类的 方法 信息 * @param sbuf 存储信息容器 * @param targetClass 目标类 */ private void writeMethods(StringBuffer sbuf, Class<?> targetClass) { Method[] methods = targetClass.getDeclaredMethods(); for (Method m : methods) { sbuf.append("\t"); sbuf.append(Modifier.toString(m.getModifiers())); sbuf.append(" "); String returnType = m.getReturnType().getName(); sbuf.append(returnType.substring(returnType.lastIndexOf('.') + 1)); sbuf.append(" "); sbuf.append(m.getName()); sbuf.append("("); Class<?>[] paramTypes = m.getParameterTypes(); for (int i = 0; i < paramTypes.length; i++) { if (i > 0) sbuf.append(", "); String paramName = paramTypes[i].getName(); sbuf .append(paramName.substring(paramName.lastIndexOf('.') + 1)); } sbuf.append(");\n"); } } /** * 获取类的 构造函数 信息 * @param sbuf 存储信息容器 * @param targetClass 目标类 */ private void writeConstructor(StringBuffer sbuf, Class<?> targetClass) { Constructor[] constructors = targetClass.getDeclaredConstructors(); for (Constructor c : constructors) { sbuf.append("\t"); sbuf.append(Modifier.toString(c.getModifiers())); sbuf.append(" "); String name = c.getName(); sbuf.append(name.substring(name.lastIndexOf('.') + 1)); sbuf.append("("); Class<?>[] paramTypes = c.getParameterTypes(); for (int i = 0; i < paramTypes.length; i++) { if (i > 0) sbuf.append(", "); sbuf.append(paramTypes[i]); } sbuf.append(");\n"); } sbuf.append("\n"); } /** * 获取类的 属性 信息 * @param sbuf 存储信息容器 * @param targetClass 目标类 */ private void writeFiels(StringBuffer sbuf, Class<?> targetClass) { Field[] fields = targetClass.getDeclaredFields(); for (Field f : fields) { sbuf.append("\t"); sbuf.append(Modifier.toString(f.getModifiers())); sbuf.append(" "); String fieldType = f.getType().getName(); sbuf.append(fieldType.substring(fieldType.lastIndexOf('.') + 1)); sbuf.append(" "); sbuf.append(f.getName()); sbuf.append(";\n"); } sbuf.append("\n"); } /** * @param args */ public static void main(String[] args) { ReflectFactory rf = new ReflectFactory(); rf.init(); Object[] params = {}; rf.invokeMethod("Person", "main", params); }}reflect.ini文件内容:Message=com.esen.chenf.reflection.MessageReflectFactory=com.esen.chenf.reflection.ReflectFactoryPerson=com.esen.chenf.reflection.Person javaweb 上传图片问题 在线求教JPA中emf.createEntityManager()的异常 求一个ejb2.0+weblogic8.1简单例子,someone help please 初学者,求助! MyEclipse制作JAR包有关资源问题 数据类型问题? java有直接执行sql文件的函数吗??????????????????????? JSF与Spring集成的问题 用javah把T.class生成T.h后怎样生成T.dll文件? 如何卸载jbuilder 5.0 JSP高手进来解决一下,两个异常,帮忙指出。。 Java 日期相关问题
import java.io.FileInputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;public class ReflectFactory
{
private static final String FILENAME = "reflect.ini";
private Properties prop;
private Map<String, String> objTool = new HashMap<String, String>(); /**
* 初始化 读取配置文件
*/
public void init()
{
prop = new Properties();
try
{
prop.load(new FileInputStream(FILENAME));
Enumeration<?> keys = prop.keys();
while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String value = prop.getProperty(key);
objTool.put(key, value);
}
}catch (Exception e)
{
System.out.println("读配置文件异常");
}
} /**
* 根据类名(完整包名)创建实例
* @param className
* @return 类的实例
*/
private Object createObject(String className)
{
try
{
System.out.println(className);
Class<?> clazz = Class.forName(className);
return clazz.newInstance();
}catch (Exception e)
{
System.out.println("创建类的实例异常");
}
return null;
} /**
* 根据 类名、方法名 调用相应的方法
* @param cName
* @param mtdName
* @param params
*/
public void invokeMethod(String cName, String mtdName, Object[] params)
{
String className = objTool.get(cName);
Object target = createObject(className);
Class<?> targetClass = target.getClass();
int length = params.length;
Class<?>[] paramTypes = new Class<?>[length];
for (int i = 0; i < length; i++)
{
paramTypes[i] = params[i].getClass();
}
try
{
Method method = targetClass.getMethod(mtdName, paramTypes);
method.invoke(target, params);
}catch (Exception e)
{
System.out.println("执行异常");
}
} /**
* 反射显示 类 的内容(属性、方法)
* @param cName 类名
*/
public void showClass(String cName)
{
StringBuffer sbuf = new StringBuffer(1024);
String className = objTool.get(cName);
Object target = createObject(className);
Class<?> targetClass = target.getClass();
sbuf.append("类名:");
sbuf.append(className);
sbuf.append("\n\n");
sbuf.append(Modifier.toString(targetClass.getModifiers()));
sbuf.append(" class ");
sbuf.append(cName);
sbuf.append("\n{\n");
writeFiels(sbuf, targetClass);
writeConstructor(sbuf, targetClass);
writeMethods(sbuf, targetClass);
sbuf.append("}");
System.out.println(sbuf.toString());
} /**
* 获取类的 方法 信息
* @param sbuf 存储信息容器
* @param targetClass 目标类
*/
private void writeMethods(StringBuffer sbuf, Class<?> targetClass)
{
Method[] methods = targetClass.getDeclaredMethods();
for (Method m : methods)
{
sbuf.append("\t");
sbuf.append(Modifier.toString(m.getModifiers()));
sbuf.append(" ");
String returnType = m.getReturnType().getName();
sbuf.append(returnType.substring(returnType.lastIndexOf('.') + 1));
sbuf.append(" ");
sbuf.append(m.getName());
sbuf.append("(");
Class<?>[] paramTypes = m.getParameterTypes();
for (int i = 0; i < paramTypes.length; i++)
{
if (i > 0)
sbuf.append(", ");
String paramName = paramTypes[i].getName();
sbuf
.append(paramName.substring(paramName.lastIndexOf('.') + 1));
}
sbuf.append(");\n");
}
} /**
* 获取类的 构造函数 信息
* @param sbuf 存储信息容器
* @param targetClass 目标类
*/
private void writeConstructor(StringBuffer sbuf, Class<?> targetClass)
{
Constructor[] constructors = targetClass.getDeclaredConstructors();
for (Constructor c : constructors)
{
sbuf.append("\t");
sbuf.append(Modifier.toString(c.getModifiers()));
sbuf.append(" ");
String name = c.getName();
sbuf.append(name.substring(name.lastIndexOf('.') + 1));
sbuf.append("(");
Class<?>[] paramTypes = c.getParameterTypes();
for (int i = 0; i < paramTypes.length; i++)
{
if (i > 0)
sbuf.append(", ");
sbuf.append(paramTypes[i]);
}
sbuf.append(");\n");
}
sbuf.append("\n");
} /**
* 获取类的 属性 信息
* @param sbuf 存储信息容器
* @param targetClass 目标类
*/
private void writeFiels(StringBuffer sbuf, Class<?> targetClass)
{
Field[] fields = targetClass.getDeclaredFields();
for (Field f : fields)
{
sbuf.append("\t");
sbuf.append(Modifier.toString(f.getModifiers()));
sbuf.append(" ");
String fieldType = f.getType().getName();
sbuf.append(fieldType.substring(fieldType.lastIndexOf('.') + 1));
sbuf.append(" ");
sbuf.append(f.getName());
sbuf.append(";\n");
}
sbuf.append("\n");
} /**
* @param args
*/
public static void main(String[] args)
{
ReflectFactory rf = new ReflectFactory();
rf.init();
Object[] params = {};
rf.invokeMethod("Person", "main", params);
}}
reflect.ini文件内容:
Message=com.esen.chenf.reflection.Message
ReflectFactory=com.esen.chenf.reflection.ReflectFactory
Person=com.esen.chenf.reflection.Person