java中反射,枚举实际应用例子
遇到的问题
一个List<Object>的列表。。
列表中有枚举类型
枚举类型在页面显示的 时候就不能通过。属性来取数据
用反射
根据名字去匹配对应的类名 从而获取对应的属性值(反射)
jsp页面
<%@taglib uri="/WEB-INF/tld/MethodUtil.tld" prefix="methodUtil"%>
<td> <methodUtil:value className="xxxUtil" path="com.yq1012.utils" method="convert" param="枚举类型"/> </td>
tld
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.4</jsp-version>
<short-name>m</short-name>
<uri>/tlds/MethodUtil.tld</uri>
<description>
This Tag Library makes user develope JSP with method Value component easily.
</description>
<!--**********************************************-->
<!-- Tag -->
<!--**********************************************-->
<tag>
<name>value</name>
<tag-class>com.yq1012.MethodUtilTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>className</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>
className
</description>
</attribute>
<attribute>
<name>method</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>
method
</description>
</attribute>
<attribute>
<name>paramType</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
paramType
</description>
</attribute>
<attribute>
<name>param</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
param
</description>
</attribute>
<attribute>
<name>path</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
</description>
</attribute>
</tag>
</taglib>
反射帮助类
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
@SuppressWarnings("unused")
public class MethodUtilTag extends SimpleTagSupport {
private String className;
private String method;
private String paramType;
private String param;
private String path;
@Override
@SuppressWarnings("unchecked")
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
Class[] parasClass = null;
Object[] args = null;
if(StringUtil.isNotEmpty(param)) {
if(param.contains(",")) {
String[] params = StringUtil.split(param, ",", false);
parasClass = new Class[params.length];
args = new Object[params.length];
for (int i = 0; i < parasClass.length; i ) {
parasClass[i] = String.class;
args[i] = params[i];
}
}
}
Class classType = String.class;
String value = "";
if("int".equals(paramType) || "Integer".equals(paramType)) {
classType = Integer.class;
} else if("double".equals(paramType) || "Double".equals(paramType)) {
classType = Double.class;
}
if(StringUtil.isNotEmpty(className) && StringUtil.isNotEmpty(method)) {
try {
String packagePath = this.className;
if(StringUtil.isNotEmpty(path)) {
packagePath = this.path "." packagePath;
} else {
packagePath = "这里是类的包名字." packagePath;
}
Class clazz = Class.forName(packagePath);
Object newInstance = clazz.newInstance();
Method m = null;
Object object = null;
if(parasClass != null) {
m = clazz.getMethod(method, parasClass);
object = m.invoke(newInstance, args);
} else {
m = clazz.getMethod(method, classType);
object = m.invoke(newInstance, new Object[]{param});
}
value = object.toString();
} catch (Exception e) {
value = "";
e.printStackTrace();
}
}
out.print(value);
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
public String getParamType() {
return paramType;
}
public void setParamType(String paramType) {
this.paramType = paramType;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
反射转换实体类
public class xxxUtil {
public String convert(String value){
if ("yq1012".equals(value)) {
return 枚举.getName();//枚举的要导入对应的包名字
} else {
return null;
}
}
}
您可能感兴趣的文章:
java中反射,枚举实际应用例子
Java 接口常量反模式及定义 Java 常量的教程
PHP 枚举类型的管理与设计
JavaScript反射机制与继承:概念
C#反射的一些基本应用
C语言枚举类型学习笔记
如何使用PHP来实现枚举?
Java反射(泛型擦除演示)的例子
C#反射的使用方法
C# 枚举类型转换字符串 Enum to string