首页 > 开发 > 综合 > 正文

一个简单的类代码生成器

2024-07-21 02:14:11
字体:
来源:转载
供稿:网友
花了一点点时间,写了一个类玩玩,希望有点用。

类是怎么用的呢?

比如:输入:


public classname;
private string variable1;
private integer variable2;
private double variable3;



点击 generate!,后,输出:


public classname {
private string variable1;
private integer variable2;
private double variable3;
public string getvariable1()
{
return variable1;
}
public void setvariable1(string variable1)
{
this.variable1 = variable1;
}
public integer getvariable2()
{
return variable2;
}
public void setvariable2(integer variable2)
{
this.variable2 = variable2;
}
public double getvariable3()
{
return variable3;
}
public void setvariable3(double variable3)
{
this.variable3 = variable3;
}
}





哈哈,大家就知道它的用处了吧

源代码:

classgen.java com.jrock.util



package com.jrock.util;
/**
* 输入的字符串格式为
* 限定符 类名;
* 变量;变量;变量;...
* 变量格式为{限定符 数据类型 变量名}
* 其中: 限定符 (private/...) 不能省
* 类名 不能省
* 数据类型 (integer/...) 不能省
* 变量名 不能省
* @version 1.0
*/
public class classgen {
public classgen() {
}
//去掉多余的空格
private static void dismissblank(string[] array)
{
int len= array.length;
boolean over =false;
while(!over) {
over=true;
for (int i = 0; i < len; i++) {
if (array[i].equals("")) {
for (int j = i; j < len - 1; j++) {
array[j] = array[j + 1];
}
len--;over=false;
}
}
}
}
public static string outgetter(string parstr)
{
string[] array = parstr.split(" ");
if(array.length<3) return null;
dismissblank(array);
string type = array[1];
string par = array[2];
stringbuffer result = new stringbuffer();
result.append("public " + type + " get" + par.substring(0,1).touppercase() + par.substring(1));
result.append("()/n{/n/t return " + par + ";/n}/n");
return result.tostring();
}
public static string outsetter(string parstr)
{
string[] array = parstr.split(" ");
if(array.length<3) return null;
dismissblank(array);
string type = array[1];
string par = array[2];
stringbuffer result = new stringbuffer();
result.append("public void set" + par.substring(0,1).touppercase() + par.substring(1));
result.append("(" + type + " " + par + ")/n{/n/t this."+ par + " = " + par + ";/n}");
return result.tostring();
}
//获得函数的主体
public static string getclasscontent(string in)
{
if(in==null) return "";
in=in.replace('/n',' ').trim();
if(in.equals("")) return "";
stringbuffer result = new stringbuffer();
string [] pararray = in.split(";");
if(pararray.length>0) {
//输出类名
result.append(pararray[0] + " {/n");
//输出变量
for (int i = 1; i < pararray.length; i++) {
result.append(pararray[i] + ";/n");
}
//输出setter和getter
for (int i = 1; i < pararray.length; i++) {
result.append(outgetter(pararray[i]) + "/n");
result.append(outsetter(pararray[i]) + "/n");
}
result.append("}");
}
return result.tostring();
}
//测试用的
public static void main(string[] args) {
string instr = "public classname;/n" +
"private string variable1;/n" +
"private integer variable2;/n" +
"private double variable3;/n";
system.out.println(getclasscontent(instr));
}
}





gui:

classgenapplication.java com.jrock.util



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import com.jrock.util.classgen;
public class classgenapplication {
public component createcomponents() {
string instr = "public classname;/n" +
"private string variable1;/n" +
"private integer variable2;/n" +
"private double variable3;";
final jtextarea text1 = new jtextarea(instr,20,40);
final jtextarea text2 = new jtextarea("",20,50);
text1.setfont(new java.awt.font("arial",java.awt.font.plain,20));
text2.setfont(new java.awt.font("arial",java.awt.font.plain,12));
// create a scrollable text area
jscrollpane sp1 = new jscrollpane(text1);
jscrollpane sp2 = new jscrollpane(text2);
jbutton button = new jbutton("generate!");
button.setmnemonic(keyevent.vk_i);
button.addactionlistener(new actionlistener() {
public void actionperformed(actionevent e) {
text2.settext(
classgen.getclasscontent(text1.gettext()));
}
});
jpanel pane = new jpanel();
pane.setborder(borderfactory.createemptyborder(
20, //top
20, //left
200, //bottom
200) //right
);
pane.setlayout(new gridlayout(0, 1));
pane.add(sp1);
pane.add(button);
pane.add(sp2);
return pane;
}
public static void main(string[] args) {
try {
uimanager.setlookandfeel(
uimanager.getcrossplatformlookandfeelclassname());
} catch (exception e) { }
//create the top-level container and add contents to it.
jframe frame = new jframe("类生成工具");
classgenapplication app = new classgenapplication();
component contents = app.createcomponents();
frame.getcontentpane().add(contents, borderlayout.center);
//finish setting up the frame, and show it.
frame.addwindowlistener(new windowadapter() {
public void windowclosing(windowevent e) {
system.exit(0);
}
});
frame.pack();
frame.setvisible(true);
}
}





thanks.



  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表