JAVA装饰类自动生成

package com.wesley.framework.decoration;

/**
* @author it.zl 封装解析Object之后的一些参数
*/
public class DecoratorParam {
private Class<?> cls;

private StringBuffer clsString = new StringBuffer();

public DecoratorParam(Class<?> cls) {
super();
this.cls = cls;
}

public DecoratorParam(Class<?> cls, StringBuffer clsString) {
super();
this.cls = cls;
this.clsString = clsString;
}

public Class<?> getCls() {
return cls;
}

public void setCls(Class<?> cls) {
this.cls = cls;
}

public StringBuffer getClsString() {
return clsString;
}

public void setClsString(StringBuffer clsString) {
this.clsString = clsString;
}

}

package com.wesley.framework.decoration;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import com.meadville.entity.Tlog;

public class DecoratorUtil {
private final static String PACKAGE = "com.XXX.entity.decoration";
private final static String LINE = "\n";
private final static String NULL = "\t";

public static void main(String[] args) {
DecoratorUtil.outputDecoratorBuffer(DecoratorUtil
.getDecoratorBuffer(new Tlog()));
}

/**
* @param param
* 输出通过解析Object的信息
*/
public synchronized static void outputDecoratorBuffer(DecoratorParam param) {
FileWriter fw = null;
String packageDirName = System.getProperty("user.dir") + "/src/"
+ PACKAGE.replace('.', '/');
try {
File file = new File(packageDirName + "\\"
+ param.getCls().getSimpleName() + "Dec.java");
file.createNewFile();
fw = new FileWriter(file);
fw.getEncoding().getBytes("utf-8");
fw.write(param.getClsString().toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* @param obj
* @return 通过Object来生成java,类似于反射
*/
public synchronized static DecoratorParam getDecoratorBuffer(Object obj) {
Class<?> cls = obj.getClass();
Field[] fields = cls.getDeclaredFields();
StringBuffer sb = new StringBuffer();
String modelName = cls.getSimpleName();
String decName = cls.getSimpleName() + "Dec";
sb.append("package ").append(PACKAGE).append(";").append(LINE);
sb.append("import ").append(cls.getCanonicalName()).append(";")
.append(LINE);
sb.append("//http://numen06.iteye.com").append(LINE);
sb.append("@SuppressWarnings(\"serial\")").append(LINE);
sb.append("public class ").append(decName)
.append(" extends DecoratorModel<").append(modelName)
.append(",").append(decName).append("> {").append(LINE);
sb.append(NULL).append("public ").append(decName)
.append("() {super();}").append(LINE);
sb.append(NULL).append("public ").append(decName).append("(")
.append(modelName).append(" model) {super(model);}")
.append(LINE);
for (Field f : fields) {
String getmethod = "get"
+ f.getName().substring(0, 1).toUpperCase()
+ f.getName().substring(1);
String setmethod = "set"
+ f.getName().substring(0, 1).toUpperCase()
+ f.getName().substring(1);
try {
Method gmothod = cls.getMethod(getmethod, new Class<?>[0]);
Method smothod = cls.getMethod(setmethod,
gmothod.getReturnType());
sb.append(NULL).append("public ")
.append(gmothod.getReturnType().getName()).append(" ")
.append(gmothod.getName()).append("() {").append(LINE);
sb.append(NULL).append(NULL).append("return super.model.")
.append(getmethod).append("();").append(LINE);
sb.append(NULL).append("}").append(LINE);
sb.append(NULL).append("public void").append(" ")
.append(smothod.getName()).append("(")
.append(smothod.getParameterTypes()[0].getName())
.append(" ").append(f.getName()).append(") {")
.append(LINE);
sb.append(NULL).append(NULL).append("super.model.")
.append(smothod.getName()).append("(")
.append(f.getName()).append(");").append(LINE);
sb.append(NULL).append("}").append(LINE);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
sb.append("}");
// System.out.println(sb.toString());
return new DecoratorParam(cls, sb);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值