JavaBean的get、set方法生成器
來源:http://www.crazyit.org/redirect.php?tid=3779&goto=lastpost
BeanGenerator.java
package codegen;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.RandomAccessFile;
import java.util.List;
import java.util.ArrayList;
public class BeanGenerator
{
//存放Bean的类名
private String className;
//接收生成Bean的文件
private File file;
//Bean属性和其属性对应的类型的元数据List
private List<BeanInfo> bList = new ArrayList<BeanInfo>();
//写入流
private RandomAccessFile raf = null;
//构造方法的参数字符串
private StringBuffer paramsBuffer = new StringBuffer();
//用来标识构造器参数何时加上","
private boolean bFirst = true;
//解析Bean的属性和其属性对应的类型
private void parse(File file) throws Exception
{
//保存解析的Bean文件
this.file = file;
//解析出类名
this.className = file.getName().substring(0, file.getName().indexOf("."));
//读取Bean文件
BufferedReader br = new BufferedReader(new FileReader(file));
String strLine = null;
//逐行读取文件内容
while ((strLine = br.readLine()) != null)
{
//当行内容同时包含private关键字和";"号时则解析该行字符串
if (strLine.contains("private") && strLine.contains(";"))
{
//获取类型字符串第一个字符的起始位置
Integer leftLoc = strLine.indexOf("private ") + "private ".length();
//获取属性名最后一个字符的位置
Integer rightLoc = strLine.indexOf(";");
//解析出属性类型和属性名,数组[0]为属性类型,数组[1]为属性名
String[] tmpStr = strLine.substring(leftLoc, rightLoc).split(" ");
//装Bean元数据封装并放入集合中
bList.add(new BeanInfo(tmpStr[0], tmpStr[1]));
}
}
}
//生成Bean的get、set方法和构造方法
private void generateSetGetConstructor() throws Exception
{
raf = new RandomAccessFile(file, "rw");
raf.seek(file.length() - 3);
raf.writeBytes("/r/n");
//--------------------生成Bean的构造方法-------------------
for (BeanInfo beanInfo : bList)
{
if (bFirst)
{
//第一次构造方法的参数后不加","
paramsBuffer.append(beanInfo.getType() + " "
+ beanInfo.getAttr());
bFirst = false;
}
else
{
//当参数列表过长时自动换行
if (paramsBuffer.length() >= 40)
{
paramsBuffer.append("/r/n/t/t" + ", " + beanInfo.getType()
+ " " + beanInfo.getAttr());
}
else
{
paramsBuffer.append(", " + beanInfo.getType()
+ " " + beanInfo.getAttr());
}
}
}
//避免中文问题输出时是乱码
raf.write("/t//无参数构造器/r/n".getBytes());
//无参数的构造器
raf.writeBytes("/tpublic " + className + "()/r/n/t{/r/n/t}/r/n");
//增加注释
raf.write("/t//初始化全部属性的构造器/r/n".getBytes());
raf.writeBytes("/tpublic " + className + "("
+ paramsBuffer.toString() + ")" + "/r/n/t{/r/n");
for (BeanInfo beanInfo : bList)
{
raf.writeBytes("/t/t");
raf.writeBytes("this." + beanInfo.getAttr()
+ " = " + beanInfo.getAttr() + ";");
raf.writeBytes("/r/n");
}
raf.writeBytes("/t}/r/n");
//----------------------------------------------------------
for (BeanInfo beanInfo : bList)
{
//增加注释
raf.writeBytes("/t//" + beanInfo.getAttr());
raf.write("属性的setter和getter方法".getBytes());
raf.writeBytes("/r/n");
//--------------------生成Bean的set方法---------------------
raf.writeBytes("/tpublic void set"
+ beanInfo.getAttr().substring(0, 1).toUpperCase()
+ beanInfo.getAttr().substring(1)
+ "(" + beanInfo.getType() + " " + beanInfo.getAttr()
+ ")" + "/r/n");
raf.writeBytes("/t{" + "/r/n");
raf.writeBytes("/t/tthis." + beanInfo.getAttr()
+ " = " + beanInfo.getAttr() + ";" + "/r/n");
raf.writeBytes("/t}" + "/r/n");
//----------------------------------------------------------
//--------------------生成Bean的get方法---------------------
raf.writeBytes("/tpublic "
+ beanInfo.getType() + " get"
+ beanInfo.getAttr().substring(0, 1).toUpperCase()
+ beanInfo.getAttr().substring(1) + "()" + "/r/n");
raf.writeBytes("/t{" + "/r/n");
raf.writeBytes("/t/treturn " + beanInfo.getAttr()
+ ";" + "/r/n/t}/r/n");
//----------------------------------------------------------
}
raf.writeBytes("}/r/n");
//关闭写入流
raf.close();
}
public static void main(String[] args) throws Exception
{
BeanGenerator beanGen = new BeanGenerator();
beanGen.parse(new File(args[0]));
beanGen.generateSetGetConstructor();
}
}
BeanInfo.java
package codegen;
//保存Bean属性和其属性类型
class BeanInfo
{
private String type;
private String attr;
public BeanInfo(String type, String attr)
{
this.type = type;
this.attr = attr;
}
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setAttr(String attr)
{
this.attr = attr;
}
public String getAttr()
{
return attr;
}
}
配置EditPlus:
测试:
JavaBean的get、set方法生成器相关推荐
- 通过 SpringBoot 中使用 lombok 实现自动创建JavaBean的get/set方法、全参/无参构造方法、toString()、equals()、hashCode()
通过SpringBoot中使用lombok实现 先导入依赖 <dependency><groupId>org.projectlombok</groupId>< ...
- JdbcTemplate查询返回JavaBean的几种方法
关于JdbcTemplate的官方描述如下: org.springframework.jdbc.core.JdbcTemplate 大约的讲,将JdbcTemplate返回的list结果集生成Java ...
- 2020.1.30 封装和隐藏(四种访问权限修饰符)、this、JavaBean、继承、方法的重写
面对对象特征之一:封装和隐藏 Java中通过数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对属性的操作. 四种访问权限修饰符 在同一个ja ...
- java bean 数据库表_如何从数据库的表格自动生成javabean,包含get/set方法等
Torque是一种ORM的工具,它最早是Apache Jakarta Turbine项目的一部分,现在已经从Turbine中剥离出来,可以独立使用.目前,它的版本是3.0. Torque的主要特性 ...
- Lombok ——自动化方法生成器
引言 此文为简单的Lombok 演示. Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法.简 ...
- 网页计数器 javabean session application 多种方法实现
运用session,javabean,servlet实现网页计数器 目录 一.运行结果 二.原理 1.session 2.Javabean 但是有个小问题 3.application 三.代码分享 ...
- python迭代器两个基本方法可供参考_浅析python迭代器和生成器
可迭代对象 概念 一个对象(在Python里面一切都是对象)只要实现了只要实现了__iter__()方法,那么这个对象就是可迭代对象 常见的可迭代对象 集合或序列类型(如list.tuple.set. ...
- Python生成器(send,close,throw)方法详解
<Python生成器>一节中,详细介绍了如何创建一个生成器,以及生成器的基础用法.本节将在其基础上,继续讲解和生成器有关的一些方法. Python生成器send()方法 我们知道,通过调用 ...
- Transformer课程 业务对话机器人 Python使用高级的生成器方法
Transformer课程 业务对话机器人 Python使用高级的生成器方法 您是否曾经使用过非常大的数据集,导致机器的内存溢出?或者,您可能有一个复杂的函数,每次调用它时都需要维护一个内部状态,但该 ...
最新文章
- AOP之PostSharp初见-OnExceptionAspect
- 虚拟机WIN7显示主机ubuntu的文件
- SAP freelancer接SAP项目的几种方法
- Azure Arc 正式商用、Power Platform+GitHub 世纪牵手,一文看懂 Ignite 2020
- HijackThis日志细解【简明教程增强版】(五)
- 偏见方差的权衡(Bias Variance Tradeoff)
- iOS ----------怎么修改xcode默认打开方式
- 机器学习 —— 概率图模型(CPD)
- 力控组态软件 mysql_组态软件国内那家做的好?推荐几个比较一下
- 2022年最全公关活动策划案例(共14份)
- 2022.08.09-docker容器网络配置-左冕
- 手动实现一门图灵完备的编程语言——Brainfuck
- delphi uniDac
- 有哪些在家健身的软件?Mac健身软件推荐
- Linux内核 失速(STALL) 警告说明文档翻译
- 关于裁剪CSV文件中的各类数据的代码
- 手把手教你选购电脑组件
- Matterport3D:室内环境RGB-D数据的深度学习
- 【运维】记一次yapi安全漏洞导致服务器被木马入侵的处理过程
- java http获取cookie_java – 通过HttpClient接受所有Cookie
热门文章
- Python删除Delphi临时文件的小脚本
- 分布式系统中的进程标识
- 程序员四大禁忌(同样适合向梦想冲刺的所有人~~)
- QT中事件发送函数sendEvent()、postEvent()详解
- 将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果微笑
- .NET的Snk使用方法
- Java—TCP与HTTP连接
- css 选择href属性值,巧用CSS属性值正则匹配选择器(小技巧)
- php 实时监测网站是否异常_网站监控劫持问题,怎么通过网站监控解决劫持问题...
- mysql忘记命令后半部分_Mysql 5 易忘的命令