教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 java中反射,枚举实际应用例子

java中反射,枚举实际应用例子

发布时间:2016-10-18   编辑:jiaochengji.com
教程集为您提供java中反射,枚举实际应用例子等资源,欢迎您收藏本站,我们将为您提供最新的java中反射,枚举实际应用例子资源
对于java中反射,枚举的例子我们相信许多的朋友不怎么清楚了,对于这个小编就来为各位介绍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

[关闭]
~ ~