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);
}
}
分享到:
相关推荐
在Java编程中,生成验证码是一项常见的任务,常用于防止机器人或恶意用户自动操作,例如注册、登录等场景。验证码(CAPTCHA)全称是“Completely Automated Public Turing test to tell Computers and Humans Apart...
例如,当选择对一个输入流进行装饰时,IDE会自动提示可用的装饰器类,并自动生成相应的代码。 总的来说,Java IO利用装饰模式构建了一个灵活且易于扩展的流处理框架,允许我们在运行时动态地增加流的功能,而无需...
这个库尤其适用于那些需要大量自动生成代码的场景,如ORM框架、代码生成器或元编程应用。 在Java编程中,源码生成通常涉及到以下几个关键知识点: 1. **模板引擎**:Jource可能采用了模板引擎技术,允许开发者定义...
需要注意的是,自动转换工具并不能完全替代人工工作,特别是在处理复杂逻辑、自定义类、面向对象编程以及 Python 的高级特性(如装饰器、元类等)时。因此,对于大型项目或复杂的 Python 代码,手动迁移可能是更好的...
1. **源代码文件**(.java) - 包含游戏逻辑、玩家、棋盘、骰子、卡片等类的实现。 2. **资源文件** - 可能包含图片、音频、配置文件等,用于增强游戏体验。 3. **编译后的类文件**(.class) - Java编译器将源代码...
1. 数据访问层(DAL)生成:可以自动生成与数据库交互的代码,如ORM框架的实体类、SQL语句等。 2. 用户界面(UI)生成:根据模型数据生成前端页面模板,减少前端开发工作量。 3. 服务接口(API)生成:根据接口定义...
Javadoc工具可以自动生成类、接口和方法的文档,帮助其他开发者理解数据的意义和用途。 5. **序列化**:Java序列化机制允许将对象的状态转换为字节流,便于存储或在网络上传输。这对于持久化数据字典或者在分布式...
Java验证码生成库JCaptcha是一个广泛使用的开源库,用于在Java应用程序中创建安全的、难以破解的验证码。验证码(CAPTCHA)的主要目的是防止自动化程序(如机器人或爬虫)进行恶意操作,例如注册虚假账户或进行大量...
它们可以用于编译时检查、运行时处理或自动生成代码等场景。 以上是《JAVA解惑》一书中可能涉及的部分知识点,每一点都值得深入学习和实践。通过掌握这些内容,开发者可以更好地解决Java编程中的各种问题,提升编程...
Java中,Builder模式通常包含一个Director类来指导构造过程,以及一个具体的Builder类来生成产品。 5. 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过复制这个原型来创建新的对象。在Java中,可以...
- 讨论注解的用途,如代码自动生成、元数据提供等。 11. **集合框架高级话题** - 学习泛型的使用,理解类型擦除的概念。 - 面试题:解释什么是并发容器,比如ConcurrentHashMap? 12. **Java 8及新特性** - ...
描述中提到的"自动获取屏幕大小"是通过Java的`GraphicsDevice`类来实现的,它允许程序获取用户的显示器尺寸,然后根据这些信息调整JFrame的大小。"去除边框"和"最大化最小化关闭按钮"是通过设置JFrame的属性完成的,...
- **ConcreteDecorator (具体装饰类)**:继承自抽象装饰类,负责给具体构件添加新的行为。 #### 模式分析 装饰模式的关键优势之一在于它提供了比继承更灵活的方式来扩展对象的功能。与继承关系相比,装饰模式通过...
6. **多线程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口以及并发工具类如synchronized关键字、Lock接口、Semaphore等,用于实现并发编程。 7. **网络编程**:学习Socket编程,理解TCP/IP协议,...
在Java中,装饰器模式通常用于在不改变原有类的情况下,为其添加新的功能。 ### 结论 GoF设计模式为解决软件设计中的常见问题提供了宝贵的指导思想。通过合理运用这些设计模式,可以显著提升软件系统的灵活性、可...
7. **Maven或Gradle**:这些是构建工具,帮助管理和构建Java项目,自动化依赖管理、编译、打包和部署过程。 8. **版本控制**:如Git,用于团队协作和代码版本管理。 9. **设计模式**:如单例、工厂、装饰器等,...
- `java.util.Random` 用于生成伪随机数,可用于生成随机数或随机选择。 - **向量类 Vector** - `java.util.Vector` 是线程安全的动态数组,可以自动调整大小,适用于多线程环境。 - **栈类 Stack** - `java....
8. **注解(Annotations)**:注解是元数据的一种形式,可以用于向编译器、JVM或其他工具提供有关代码的信息,如用于验证、自动生成代码、部署配置等。 9. **模块系统(Module System)**:Java 9 引入了模块系统,...
7. **反射与注解**:反射机制允许在运行时动态获取类的信息并操作对象,注解提供了一种元数据的方式,可以用于配置、验证或自动生成代码。经典代码可能会使用反射来实现动态代理,或者用注解进行代码的自我描述。 8...
- 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活。 4. Java学习资源 该部分内容提到了一个Java学习群,这可能是一个提供学习支持和资源...