JAvaエンティティクラスを巡る属性とデータ型および属性値
同級生とアウトソーシングの仕事を受けて、プロジェクトの中で多くの場所がpoiを使ってexcelをエクスポートするため、毎回エクスポートするたびに同じコードをたくさん書きます.poiのcell.setCellValue()のためです.毎回設定するのは異なるエンティティbeanの属性値で、コードに重複する値がたくさんあるので、beanの属性と属性値を自動的にロードできる方法があるかどうか考えています.まず思いついたのは反射に違いないが、自分で書いても書けなかった.テキストリンクhttp://blog.csdn.net/dongzhouzhou/article/details/8446782
原文のコードは次の通りです.
私のエンティティbeanにはdoubleタイプがあるので、クラスをカプセル化する方法で値を取得したくないので、彼の上にコードを追加しました.
これにより,属性タイプが何であるかを知ることができ,判断文をうまく加えることができる.もちろん原文コードには最適化に値するところがたくさんありますが、ここでは最適化していません.poiとエクスポートして統合してから最適化するつもりです.
原文のコードは次の通りです.
/**
*
* @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とエクスポートして統合してから最適化するつもりです.