`
yezi_0016
  • 浏览: 493 次
社区版块
存档分类
最新评论

Java

阅读更多

MyEclipse生成get/set注释

    通常我们把 JavaBean 的字段注释(文档注释格式)写在字段上面,但生成的Get/Set方法不会添加字段注释,通过修改Eclipse源码可解决。效果如下:

 

	/**
	 * 序号
	 */
	private int id;

	/**  
	 * 获取序号  
	 * @return id 序号
	 */
	public int getId() {
		return this.id;
	}

	/**  
	 * 设置 序号  
	 * @param id 序号
	 */
	public void setId(int id) {
		this.id = id;
	}

解决方案如下:

 

通过反编译,修改MyEclipse2013的安装文件夹plugins目录下的org.eclipse.jdt.ui_3.8.2.v20130107-165834.jar包中的org.eclipse.jdt.internal.corext.codemanipulation.GetterSetterUtil类
下的getSetterStub及getGetterStub方法,来实现生成getter/setter时,注释使用成员变量的注释(如果成员变量的注释(文档注释格式)有的话)。在选择了生成getter/setter时需要生成code comment的话,如果没有成员变量的注释则使用注释模板生成。

一、在MyEclipse2013中新建一个工程,在src目录下新建org.eclipse.jdt.internal.corext.codemanipulation包,拷贝反编译出的GetterSetterUtil.java类到该目录下,会有报错发生,主要是一些方法和类找不到的问题。现在在工程名上右键新建一个名称为libs的文件夹,从MyEclipse2013的安装文件夹plugins下拷贝

org.eclipse.jdt.core_3.8.3.v20130121-145325.jar、

org.eclipse.jdt.ui_3.8.2.v20130107-165834.jar、

org.eclipse.equinox.common_3.6.100.v20120522-1841.jar三个jar文件到libs目录,并添加到构建路径。


打开GetterSetterUtil类会看到如下错误,在报错处鼠标悬停几秒,会出现提示对话框,选择Organize import即可修复错误。现在已经解决所以报错问题。下面修改源代码:


二、修改源代码:

getSetterStub函数修改的地方为:

 

.......  
        IJavaProject project = field.getJavaProject();  
        //start  
        String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(project, fieldName, field.getFlags());  
        //end  
        String argname = StubUtility.suggestArgumentName(project, accessorName,EMPTY);  
.......  
        if (addComments) {  
            String comment = CodeGeneration.getSetterComment(  
                    field.getCompilationUnit(),  
                    parentType.getTypeQualifiedName('.'),  
                    setterName,   
                    field.getElementName(),   
                    typeName,   
                    argname,   
                    accessorName,  
                    lineDelim);  
            //start  
            ISourceRange sr = field.getJavadocRange();  
            if (null != sr) {  
                String filedComment = field.getSource();  
                filedComment = filedComment.substring(0, sr.getLength());  
                filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");  
  
                comment = comment.replaceFirst(field.getElementName(), filedComment);  
  
                int i = comment.lastIndexOf(field.getElementName());  
                int j = getCount(comment, field.getElementName());  
                if (i != -1 && j >= 2) {  
                    comment = comment.substring(0, i) + filedComment + comment.substring(i + field.getElementName().length());  
                }  
            }  
            //end  
            if (comment != null) {  
                buf.append(comment);  
                buf.append(lineDelim);  
            }  
.......  

 getGetterStub函数修改的地方为:

 

 

.......
		String typeName = Signature.toString(field.getTypeSignature());
		//start
		String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(field.getJavaProject(), fieldName, field.getFlags());
		//end
		String lineDelim = "\n";
		StringBuffer buf = new StringBuffer();
		if (addComments) {
			//field.getCompilationUnit() 得到当前类文件内容,就是要get,set的东西
			//parentType.getTypeQualifiedName('.') 得到类名
			//getterName 拼出get的方法名
			//field.getElementName() 得到字段名
			//typeName 类型
			String comment = CodeGeneration.getGetterComment(
							field.getCompilationUnit(),
							parentType.getTypeQualifiedName('.'),
							getterName,
							field.getElementName(),
							typeName, 
							accessorName, 
							lineDelim);
			//start
			ISourceRange sr = field.getJavadocRange();
			if (null != sr) {
				String filedComment = field.getSource();
				filedComment = filedComment.substring(0, sr.getLength());
				filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");
				comment = comment.replaceFirst(field.getElementName(),
						filedComment);
				int i = comment.lastIndexOf(field.getElementName());
				int j = getCount(comment, field.getElementName());
				if (i != -1 && j >= 2) {
					comment = comment.substring(0, i)
							+ filedComment
							+ comment.substring(i
									+ field.getElementName().length());
				}
			}
			//end
.....

 新添加一个名称为getCount的方法,代码如下:

 

 

	//start
	private static int getCount(String str, String sign) {
		// 查找某一字符串中str,特定子串sign的出现次数
		if (str == null)
			return 0;
		double i = str.length();
		str = str.replaceAll(sign, "");// 将串中的字符sign替换成""
		return (int) (i - str.length()) / sign.length();
	}
	//end

编译器不报错的时候,在bin目录下拷贝GetterSetterUtil.class文件,使用zip或rar压缩软件打开jar包,替换org.eclipse.jdt.ui_3.8.2.v20130107-165834.jar包中的org.eclipse.jdt.internal.corext.codemanipulation目录下的同名文件。

三、配置MyEclipse2013

 

四、效果

 

 

在JavaBean中使用Alt+Shift+Z快捷键调出get/set方法生成面板,如图所示,点击确定按钮后即可看到效果。



 

  • 大小: 65.3 KB
  • 大小: 83.7 KB
  • 大小: 41.9 KB
  • 大小: 32.8 KB
  • 大小: 62.8 KB
分享到:
评论

相关推荐

    Java 面经手册·小傅哥.pdf

    这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...

    Java OCR 图像智能字符识别技术,可识别中文

    Java OCR(Optical Character Recognition,光学字符识别)技术是一种计算机视觉领域的应用,它能将图像中的文字转换成可编辑的文本格式。这项技术在各种场景下都有广泛应用,比如文档扫描、车牌识别、发票处理等。...

    java电商源代码 java电商源代码

    java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java...

    java api最新7.0

    JAVA开发人员最新版本7.0 api文档!本文档是 Java Platform Standard Edition 7 的 API !Java 1.7 API的中文帮助文档。 深圳电信培训中心 徐海蛟博士教学用api 7.0中文文档。支持全文检索,在线即时查询。 里面列...

    java景点导航系统java景点导航系统

    java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点...

    java单机小游戏.zip

    java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏...

    java开源包4

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包5

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包8

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包10

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java2Pas Java代码转pas代码

    Java2Pas是一个实用工具,主要用于将Java编程语言编写的源代码转换为Pascal语言的等效代码。这个工具对于那些需要在两种语言之间迁移代码或者理解不同编程语言语法的开发者来说非常有价值。Java和Pascal虽然都是面向...

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    ### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....

    Java文件管理系统源码.zip

    Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 ...

    Java基础 学习笔记 Markdownr版

    Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性,灵活性和安全性。本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,...

    smali2java——直接将smali转换成java

    标题"smali2java——直接将smali转换成java"揭示了本文的核心主题,即一个名为"smali2java"的工具,它的主要功能是将编程语言Smali转换为Java。Smali是一种低级的、汇编式的语言,通常用于Android应用的逆向工程,而...

    java2python--java代码转python工具

    Java到Python的转换工具,如标题“java2python”所示,是编程领域中的一种实用技术,旨在帮助开发者将已有的Java代码转换为Python语言。这种转换对于那些熟悉Java但希望进入Python生态系统,或者想要利用Python特定...

    java开源包3

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java11安装包正式版

    jdk11官方版是一款专为java编程人员推出的软件开发工具。JAVA JDK 11最新版可以帮助用户轻松的获取到JAVA的运行环境,让你在电脑上进行程序开发操作。JAVA JDK 11软件新增Epsilon 垃圾收集器和lambda 参数的局部变量...

Global site tag (gtag.js) - Google Analytics