`

根据Map 动态生成一个类 动态打印

    博客分类:
  • Java
 
阅读更多

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import cn.com.css.zero.student;


public class TestCopy {

 /**
  * copy map to class
  * @throws ClassNotFoundException
  * @throws InvocationTargetException
  * @throws IllegalAccessException
  * @throws IllegalArgumentException
  * @throws InstantiationException
  */
 public static void copyMapToClass(student student, Map map) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException{
  
  Set set = map.keySet();
  Map mapProperty = new HashMap(); 
     
     Class cla = student.getClass();
    
 
     //获得属性
     Field[] f=cla.getDeclaredFields();
     //获得方法
     Method[] methods = cla.getDeclaredMethods();
     Map mapMethod = new HashMap();
     for(int i=0; i<methods.length; i++){
     Method m= methods[i];
     mapMethod.put(m.getName(), m);
     }
     //解析属性
     for (Field field : f) {
     //获得属性名称
      String propertyName = field.getName(); 
      //获得属性类型
      String propertyType = field.getType().toString(); 
  
      //属性类型
      propertyType = getPropertyName(propertyType);
      
      mapProperty.put(propertyName, propertyType); 
     }   
     //实际属性
  Set set2 = mapProperty.keySet();  
  for(Object objs: set){
   Object type = mapProperty.get(objs);
      if(type!=null && !type.toString().trim().equals("")){
       //获得方法名
       String methodName = getGetMethodName(objs.toString());
       //获得实际方法
       Object objMethod = mapMethod.get(methodName);
       if(objMethod!=null){
        Method method = (Method)objMethod;
        
        //获得属性类型
        Object  proType = mapProperty.get(objs);
        if(proType==null || proType.toString().trim().equals("")){
         continue;
        }
        String propertyType = proType.toString();
        if(propertyType.toString().trim().equals("String")){
         method.invoke(student, map.get(objs));
        }
        if(propertyType.toString().trim().equals("Integer") || propertyType.toString().trim().equals("int")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Integer value = Integer.parseInt( map.get(objs).toString() );
          method.invoke(student, value);
         } 
        }
        
        if(propertyType.toString().trim().equals("Byte") || propertyType.toString().trim().equals("byte")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Byte value = Byte.parseByte( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Short") || propertyType.toString().trim().equals("short")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Short value =  Short.parseShort( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Long") || propertyType.toString().trim().equals("long")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Long value =  Long.parseLong( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Double") || propertyType.toString().trim().equals("double")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Double value =  Double.parseDouble( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Float") || propertyType.toString().trim().equals("float")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Float value =  Float.parseFloat( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Boolean") || propertyType.toString().trim().equals("boolean")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Boolean value =  Boolean.valueOf(map.get(objs).toString());
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Character") || propertyType.toString().trim().equals("char")){
           if(objs!=null && !objs.toString().trim().equals("")){
             Character value = Character.valueOf( map.get( objs ).toString().toCharArray()[0] );
          method.invoke(student, value);
         }
         
        }
       }
      }
  }  
 }
 
 
 /**
  * 第一个字母大写
  * @param property
  * @return
  */
 public static String getGetMethodName(String property){
     
     String reStr = "";
     if(property==null || property.toString().trim().equals("")){
      return reStr;
     }
    
     char[] chars = property.toCharArray();
     if(chars==null || chars.length == 0){
      return reStr;
     } 
    
     String c = chars[0] + "";
     c = c.toUpperCase();
     char c1 = c.toCharArray()[0];
     chars[0] = c1;
     reStr = new String(chars);
     reStr =  "set" + reStr;
     return reStr;
 }
 
 
 
 /**
  * 第一个字母大写
  * @param property
  * @return
  */
 public static String getSetMethodName(String property){
     
     String reStr = "";
     if(property==null || property.toString().trim().equals("")){
      return reStr;
     }
    
     char[] chars = property.toCharArray();
     if(chars==null || chars.length == 0){
      return reStr;
     } 
    
     String c = chars[0] + "";
     c = c.toUpperCase();
     char c1 = c.toCharArray()[0];
     chars[0] = c1;
     reStr = new String(chars);
     reStr =  "get" + reStr;
     return reStr;
 }
 
 
 
 /**
  * 获取一个字符串中最后一个.之后的内容
  * @param property
  * @return
  */
 public  static String getPropertyName(String property){ 
  String initValue = property;
  int pos = property.indexOf(".");
  String reStr = property;
  int re = pos;
  while(pos>0 ){
   property = property.substring(pos + 1);
   pos = property.indexOf(".");
   reStr = property;
   re = pos;
  }  
  return reStr;
 }
 
 
 
 
 public static String toString(Object obj) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
  
  StringBuffer sb = new StringBuffer();
  sb.append(obj.toString());
  sb.append("(") ;
  sb.append("\n");
    
     Class cla = obj.getClass();
     Field[] fields = cla.getDeclaredFields();
   
     Method[] methods = cla.getDeclaredMethods();
     Map mapMethod = new HashMap();
   
     for(Method method : methods){
      mapMethod.put(method.getName(), method);
     }
      for (Field field : fields) {
       //获得属性名称
      String propertyName = field.getName(); 
      String methodName = getSetMethodName(propertyName);
      //获得实际方法
      Object objMethod = mapMethod.get(methodName);
      if(objMethod!=null){
       Method method = (Method)objMethod;
       //调用方法
       Object returnValue = method.invoke(obj);
        sb.append("\t");
        sb.append(field.getName() + " : " + returnValue);
        sb.append("\n") ;
      } else {
       methodName = methodName.replaceAll("get", "is");
       objMethod = mapMethod.get(methodName);
       if(objMethod!=null){
        Method method = (Method)objMethod;
        //调用方法
        Object returnValue = method.invoke(obj);
         sb.append("\t");
         sb.append(field.getName() + " : " + returnValue);
         sb.append("\n") ;
       }
      }
     }
  sb.append(")") ;
  return sb.toString();
 }
 
 
 
 public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException{
  
  Map map = new HashMap();
  map.put("id", "1234567");
  map.put("name", "kelongmaode");
  map.put("clazz", "1101");
  
  map.put("myshort", "1101");
  map.put("mylong", "1101");
  map.put("mydouble", "1101");
  map.put("myfloat", "1101");
  map.put("myboolean", "true");
  map.put("mychar", "a");
  map.put("mybyte", "1");
  
  student student = new student();  
  copyMapToClass(student, map);
  
  String str = toString(student);
     System.out.println(str);    
 }
}

 

 

package cn.com.css.zero;

public class student {
 
 
 private String name;
 private int id;
 private String clazz;
 private boolean myboolean;
 private float myfloat;
 private double mydouble;
 private short myshort;
 private long mylong;
 private char mychar;
 private byte mybyte;
 
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getClazz() {
  return clazz;
 }
 public void setClazz(String clazz) {
  this.clazz = clazz;
 }
 
 public boolean isMyboolean() {
  return myboolean;
 }
 public void setMyboolean(boolean myboolean) {
  this.myboolean = myboolean;
 }
 public float getMyfloat() {
  return myfloat;
 }
 public void setMyfloat(float myfloat) {
  this.myfloat = myfloat;
 }
 public double getMydouble() {
  return mydouble;
 }
 public void setMydouble(double mydouble) {
  this.mydouble = mydouble;
 }
 public short getMyshort() {
  return myshort;
 }
 public void setMyshort(short myshort) {
  this.myshort = myshort;
 }
 public long getMylong() {
  return mylong;
 }
 public void setMylong(long mylong) {
  this.mylong = mylong;
 }
 
 public char getMychar() {
  return mychar;
 }
 public void setMychar(char mychar) {
  this.mychar = mychar;
 }
 public byte getMybyte() {
  return mybyte;
 }
 public void setMybyte(byte mybyte) {
  this.mybyte = mybyte;
 }
 
 
 

}

分享到:
评论

相关推荐

    Java Jsp 调用ireport动态模板打印

    - 填充报表数据,创建`JasperPrint`对象,这需要一个`Map`对象来存储报表参数和数据源。 - 如果需要,可以对`JasperPrint`对象进行进一步处理,比如添加页眉页脚、调整样式等。 3. **JSP页面交互**: - 在JSP...

    图框生成和批量打印工具V5.2及注册机.rar

    总结来说,"图框生成和批量打印工具V5.2"是一个高效、实用的GIS辅助工具,它的图框生成功能和批量打印能力,对于地理信息行业的专业人士来说,无疑是一把利器。配合其良好的软件兼容性和丰富的配套资源,使得用户...

    java生成一维码

    然而,JAI并不直接支持一维码的生成,通常需要配合其他库一起使用,例如Barbecue,一个基于Java的条码生成库。但请注意,JAI已经被弃用,所以除非有特殊需求,否则不推荐使用。 在你提到的压缩包文件中,包含了一个...

    IAR MAP文件分析

    MAP文件是IAR编译器编译生成的文件,记录了程序在内存中的分布情况。 在IAR工程中,MAP文件是编译生成的文件,记录了程序在flash中的分布情况。MAP文件主要分为四部分:A1、A2、P1、P2。其中,A1部分是向量表,A2...

    java 实现二维码批量打印

    3. **编写二维码生成代码**: 使用ZXing提供的`com.google.zxing.client.j2se.MatrixToImageWriter`类,可以将数据编码为一个图像,这便是二维码。例如: ```java Map, ErrorCorrectionLevel&gt; hints = new HashMap...

    C# 根据字符串生成二维码的实例代码

    接下来,我们将创建一个新的控制器,名为`StrController`,并添加一个`QRcode`方法来处理二维码生成。在这个方法中,我们首先初始化一个`BarcodeWriter`对象,并将其格式设置为`BarcodeFormat.QR_CODE`,以指定我们...

    通过freemarker模板 生成PDF

    2. **准备数据模型**:在Java代码中,创建一个对象或Map,包含将要填充到模板中的数据。 3. **处理模板**:使用Freemarker API的`Configuration`和`Template`类,将数据模型应用到模板上,生成HTML字符串。 4. **...

    java生成html文件的类,有架包和实例

    总结来说,这个项目可能包含一个使用Java内部类和FreeMarker模板引擎的实例,通过`JspToHtml.java`将JSP转换为HTML文件,而`freemarker-2.3.19.jar`则提供了动态生成HTML的能力。通过这样的组合,开发者可以轻松地...

    java打印word

    5. **生成Word文档**:使用`Template`对象的`process`方法,传入数据模型和一个`OutputStream`,FreeMarker会根据模板和数据生成Word文档。Apache POI库可以帮助你创建一个`XWPFDocument`对象,这个对象可以将生成的...

    MapServer帮助文档

    - **MapScript**:一个编程接口,用于与MapServer交互,支持多种编程语言如PHP、Python等。 - **Mapfile**:配置文件,用于定义地图层、样式等信息。 2. **MapServer的应用结构**: - 用户通过Web浏览器发送请求...

    生成图框、批量输出MXD和JPG 打印工具

    该工具名为"生成图框、批量...总体来说,这个工具简化了GIS用户的制图流程,提高了批量处理地图文档的效率,并且兼容常见的GIS坐标系统和输出格式,对于需要频繁进行地图制图和输出的用户来说,是一个实用的辅助工具。

    JAVA生成word文档代码加说明

    在Apache POI中,`HWPFDocument`类用于表示一个旧版的Word文档(.doc格式)。通过它,我们可以访问并操作Word文档的内容,如文本、表格、字段等。 3. **Fields和Field类**: `Fields`类代表文档中的所有字段,而`...

    jQuery的Ajax实现异步传输List、Map

    这里,`YourPojo`是自定义的Java类,包含一个List字段和一个Map字段,Spring MVC会自动将接收到的JSON数据映射到这个类的实例上。 在实际应用中,你可能还需要关注跨域请求(CORS)问题,因为默认情况下,浏览器...

    Java使用poi-tl生成word文档

    Java使用Apache POI-TL库生成Word文档是一个高效且灵活的方法,尤其在处理大量结构化数据时。Apache POI是一个广泛使用的开源库,它允许Java开发者读写Microsoft Office格式的文件,而POI-TL(Template-based ...

    Java 中jasperReport实现动态列打印的实现代码

    在实现动态列打印时,我们需要首先从页面中获取要查询的字段,然后根据选择的字段生成相应的报表。下面是实现代码的部分内容: ```java String[] printValue = null; // 从页面中获得要查询的字段 String ...

    map

    7. **资源**:可能包含在压缩包中的"095-excel_ole6"文件,可能是教程、示例代码或者一个完整的PowerBuilder项目文件,用于演示如何实现数据窗口到Excel的导出过程。 在实际操作中,开发者通常会使用PowerScript...

    jdevice_id_map.bat.pdf

    标签为空,而部分内容展示的是一系列的文件名,包括截图和一个名为 "jdevice_id_map.bat" 的批处理文件,但没有提供这些文件的详细内容或用途。批处理文件(.bat)在Windows操作系统中通常用于执行一系列命令,但...

    freemarker生成pdf

    Freemarker是一个强大的模板引擎,常用于动态生成HTML、XML或其他文本格式的文件。在Java开发中,Freemarker被广泛应用于生成静态页面或者自定义报告。本篇将深入探讨如何利用Freemarker来生成PDF文档。 PDF...

    esri-print-widget:使用 ArcGIS Server Web Map Task 生成 PDF 的 Dojo 打印小部件

    ArcGIS JavaScript 打印小部件这是一个用于的 Dojo 打印小部件。 将使用打印服务生成地图的 PDF。 示例配置: { "name" : "print" , "path" : "widgets/print/print" , "options" : { "printUrl" : ...

Global site tag (gtag.js) - Google Analytics