JAvaエンティティクラスを巡る属性とデータ型および属性値


同級生とアウトソーシングの仕事を受けて、プロジェクトの中で多くの場所がpoiを使ってexcelをエクスポートするため、毎回エクスポートするたびに同じコードをたくさん書きます.poiのcell.setCellValue()のためです.毎回設定するのは異なるエンティティbeanの属性値で、コードに重複する値がたくさんあるので、beanの属性と属性値を自動的にロードできる方法があるかどうか考えています.まず思いついたのは反射に違いないが、自分で書いても書けなかった.テキストリンクhttp://blog.csdn.net/dongzhouzhou/article/details/8446782
原文のコードは次の通りです.
    /**
     *                   
     * @param model
     * @throws NoSuchMethodException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     */
    public static void reflectTest(Object model) throws NoSuchMethodException,
                    IllegalAccessException, IllegalArgumentException,
                    InvocationTargetException {
        //           ,  Field  
        Field[] field = model.getClass().getDeclaredFields();
        //       
        for (int j = 0; j < field.length; j++) {
                //        
                String name = field[j].getName();
                //          ,    get,set  
                name = name.substring(0, 1).toUpperCase() + name.substring(1);
                //        
                String type = field[j].getGenericType().toString();
                //   type    ,     "class ",     
                System.out.println("   :" + name);
                if (type.equals("class java.lang.String")) {
                        Method m = model.getClass().getMethod("get" + name);
                        //   getter       
                        String value = (String) m.invoke(model);
                        System.out.println("     :String");
                        if (value != null) {
                                System.out.println("    :" + value);
                        } else {
                                System.out.println("    : ");
                        }
                }
                if (type.equals("class java.lang.Integer")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Integer value = (Integer) m.invoke(model);
                        System.out.println("     :Integer");
                        if (value != null) {
                                System.out.println("    :" + value);
                        } else {
                                System.out.println("    : ");
                        }
                }
                if (type.equals("class java.lang.Short")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Short value = (Short) m.invoke(model);
                        System.out.println("     :Short");
                        if (value != null) {
                                System.out.println("    :" + value);
                        } else {
                                System.out.println("    : ");
                        }
                }
                if (type.equals("class java.lang.Double")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Double value = (Double) m.invoke(model);
                        System.out.println("     :Double");
                        if (value != null) {
                                System.out.println("    :" + value);
                        } else {
                                System.out.println("    : ");
                        }
                }
                if (type.equals("class java.lang.Boolean")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Boolean value = (Boolean) m.invoke(model);
                        System.out.println("     :Boolean");
                        if (value != null) {
                                System.out.println("    :" + value);
                        } else {
                                System.out.println("    : ");
                        }
                }
                if (type.equals("class java.util.Date")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Date value = (Date) m.invoke(model);
                        System.out.println("     :Date");
                        if (value != null) {
                                System.out.println("    :" + value);
                        } else {
                                System.out.println("    : ");
                        }
                }
        }
    }

私のエンティティbeanにはdoubleタイプがあるので、クラスをカプセル化する方法で値を取得したくないので、彼の上にコードを追加しました.
                if (type.equals("double")) {
                    Method m = model.getClass().getMethod("get" + name);
                    double value = (double) m.invoke(model);
                    System.out.println("     :double");
                    if (value >0) {
                            System.out.println("    :" + value);
                    } else {
                            System.out.println("    : ");
                    }
                }
                System.out.println("     :"+type);

これにより,属性タイプが何であるかを知ることができ,判断文をうまく加えることができる.もちろん原文コードには最適化に値するところがたくさんありますが、ここでは最適化していません.poiとエクスポートして統合してから最適化するつもりです.