国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
自己寫的JAVABEAN自動(dòng)生成器

  最近我在學(xué)習(xí)JSP,可是在每次寫JAVABEAN的時(shí)候,都發(fā)現(xiàn)好麻煩,要去寫一大堆的GET和SET方法,聽說ECLIPSE里面有自動(dòng)生成的功能,我何不自己寫一個(gè)。

  首選我定義了一個(gè)Attribute類,用來存放屬性信息(類型和名字)以及為它們生成GET/SET方法。

package Utils.AutoBean;
import java.util.*;

class Attribute
{
 private String type;    //屬性的類型
 private String name;    //屬性的名字
 private StringBuffer get = new StringBuffer();  //為屬性生成的GET方法
 private StringBuffer set = new StringBuffer();  //為屬性生成的SET方法
 private int getCount = 0;       //標(biāo)記變量,保證只生成一次
 private int setCount = 0;

 /**
 *生成屬性的set方法
 */
 private void generateSet()
 {
  if (setCount > 0)
  {
   return;
  }
  setCount++;
  set.append("\tpublic void set");
  //將屬性名第一個(gè)字母置為大寫
  set.append(name.substring(0, 1).toUpperCase() + name.substring(1, name.length()));
  set.append("(" + type + " " + name + ")\n\t{\n");
  set.append("\t\tthis." + name + " = " + name + ";\n");
  set.append("\t}\n\n");
 }

 /**
 *生成屬性的get方法
 */
 private void generateGet()
 {
  if (getCount > 0)
  {
   return;
  }
  getCount++;
  get.append("\tpublic " + type + " get");
  //將屬性名第一個(gè)字母置為大寫
  get.append(name.substring(0, 1).toUpperCase() + name.substring(1, name.length()));
  get.append("()\n\t{\n");
  get.append("\t\treturn " + name + ";\n");
  get.append("\t}\n\n");
 }

 /**
 *生成屬性的set和get方法
 */
 private void generateBean()
 {
  //生成 set 方法
  generateSet();
  //生成 get 方法
  generateGet();
 }

 /**
 *獲取屬性的GET 和 SET 方法
 */
 public StringBuffer getBean()
 {
  generateBean();
  StringBuffer sb = new StringBuffer();
  sb.append(set);
  sb.append(get);
  return sb;
 }

 /**
 *獲取屬性的get方法
 */
 public StringBuffer getGet()
 {
  generateGet();
  return get;
 }

 /**
 *獲取屬性的set方法
 */
 public StringBuffer getSet()
 {
  generateSet();
  return set;
 }

 /**
 *構(gòu)造函數(shù),傳入?yún)?shù)為屬性的類型和名字
 *@param type 屬性的類型
 *@param name 屬性的名字
 */
 public Attribute(String type, String name)
 {
  this.type = type;
  this.name = name;
 }

 public void setType(String type)
 {
  this.type = type;
 }

 public void setName(String name)
 {
  this.name = name;
 }

 public String getType()
 {
  return type;
 }

 public String getName()
 {
  return name;
 }
};

下面就是自動(dòng)生成JAVABEAN的類AutoBean

package Utils.AutoBean;
import java.util.*;
import java.io.*;

public class AutoBean
{
 private Stack attr = new Stack();     //屬性對(duì)象棧
 private ArrayList strList = new ArrayList();  //屬性行容器
 private BufferedReader in = null;
 private PrintWriter out = null;
 private StringBuffer text = new StringBuffer();  //最終文本

 /**
 *構(gòu)造函數(shù)
 *@param path 要生成JAVABEAN的JAVA文件路徑
 */
 public AutoBean(String path)
 {
  String s = "";
  try
  {
   in = new BufferedReader(new FileReader(path));
   while ((s = in.readLine()) != null)
   {
    //將類的屬性聲明保存在text中
    text.append(s + "\n");
    //將每一行入隊(duì)列
    strList.add(s);
   }
   in.close();
   //去除類定義從最后一個(gè)"}"開始的字符串
   int lst = text.lastIndexOf("}");
   if (lst == -1)
   {
    System.out.println("Error : Not a correct java file!");
    System.exit(1);
   }
   text = new StringBuffer(text.substring(0, lst));
   text.append("\n");
   out = new PrintWriter(new BufferedWriter(new FileWriter(path)));
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }

 /**
 *將屬性從每一行的文本中分割出來,并構(gòu)造屬性對(duì)象后入棧
 */
 private void cutAttr()
 {
  int index = 0;
  String s = "";
  for (int i = 0 ;i < strList.size() ;i++ )
  {
   s = (String)strList.get(i);
   //先去掉頭尾的空格 
   s = s.trim();

   if (s == "")
   {//去除空行
    continue;
   }

   if (s.startsWith("package") || s.startsWith("import") || (s.indexOf("class") != -1 && s.indexOf(";") == -1)
    || s.startsWith("/*") || s.startsWith("*/") || s.startsWith("http://")
    || s.startsWith("{") || s.startsWith("}"))
   {//去除注釋、包、類定義等
    continue;
   }
   if (s.indexOf(";") == -1)
   {//去除非分號(hào)結(jié)尾的行
    continue;
   }
   
   //找到最后一個(gè)空格,則從它開始至結(jié)尾前一個(gè)為屬性名
   int last = s.lastIndexOf(" ");
   String name = s.substring(last + 1, s.length() - 1);
   //倒數(shù)第一與倒數(shù)第二空格之前是屬性類型
   int backTwo = s.lastIndexOf(" ",last - 1);
   String type = s.substring(backTwo + 1, last);
   //將每個(gè)屬性對(duì)象入棧
   attr.push(new Attribute(type, name));
  }
 }

 /**
 *生成JAVA文件的JAVABEAN形式的字符串,并將源文件改變
 */
 public void generateBean()
 {
  cutAttr();
  Attribute tmp;

  while (!attr.empty())
  {
   tmp = (Attribute)attr.pop();
   text.append(tmp.getBean());
  }
  //將"}"加入到末尾
  text.append("}\n");
  writeBack();
 }

 /**
 *寫回到文件
 */
 private void writeBack()
 {
  out.print(text.toString());
  out.close();
 }
}

這里面我只考慮了一個(gè)沒有寫任何屬性的BEAN的一個(gè)簡(jiǎn)單JAVA文件,并且要求代碼的格式要基本上標(biāo)準(zhǔn)的。

下面的代碼是用來測(cè)試AutoBean的,測(cè)試結(jié)果完全正常。

當(dāng)然,我并沒有考慮太多的特殊情況,因?yàn)闀簳r(shí)來講只是我自己偷懶用的,所以測(cè)試也不完全。因?yàn)橹灰业妮斎敫袷秸_了,它就能很好的工作。

如果有時(shí)間的話,我會(huì)把它改進(jìn),讓它能接收更一般的格式,考慮更多的情況,能夠定制對(duì)哪些屬性分別生成只哪些方法等等。或者再給它加上一個(gè)界面,做成一個(gè)小應(yīng)用程序發(fā)到網(wǎng)上。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一個(gè)給代碼作高亮度彩色處理的類
坑爹的 Lombok,把我害慘了!
String--常用方法列表
UC 優(yōu)視科技字符串算法面試題
《軟件開發(fā)沉思錄》讀書筆記 - JavaEye技術(shù)網(wǎng)站
在項(xiàng)目中集成shiro權(quán)限框架(3)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服