我正在研究一个注释,它旨在强制一个类是不可变的.这里是处理器的代码:

@SupportedAnnotationTypes("archipel.immutability.IsImmutable")

@SupportedSourceVersion(SourceVersion.RELEASE_6)

public class IsImmutableProcessor extends AbstractProcessor {

@Override

public boolean process(Set extends TypeElement> annotations,RoundEnvironment roundEnv) {

for (TypeElement type : annotations) {

processMustBeImmutable(roundEnv,type);

}

return true;

}

private void processMustBeImmutable(RoundEnvironment env,TypeElement type) {

for (Element element : env.getElementsAnnotatedWith(type)) {

processClass(element);

}

}

private void processClass(Element element) {

boolean isFinal=false;

for(Modifier modifier : element.getModifiers()) {

if (modifier.equals(Modifier.FINAL)) {

isFinal=true;

break;

}

}

if (!isFinal) {

processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,"Class "+element+" is not immutable because it is not final");

} else {

for (Element subElement : element.getEnclosedElements()) {

if (subElement.getKind()==ElementKind.FIELD) {

isFinal=false;

for(Modifier modifier : subElement.getModifiers()) {

if (modifier.equals(Modifier.FINAL)) {

isFinal=true;

break;

}

}

if (!isFinal) {

processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,"Field "+element+" is not immutable because it is not final");

} else {

Element superElement = subElement.getEnclosingElement();

// TODO

}

}

}

}

}

}

当然,注释本身是微不足道的:

@Inherited

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.SOURCE)

public @interface IsImmutable {

}

我用Ant脚本编译它:

value="archipel.immutability" />

问题是,必须缺少某些东西,因为当我尝试使用由生成的jar文件提供的结果注释时,如下所示,没有任何反应:

@IsImmutable

public class Immut {

private int toto;

public int getToto() {

return toto;

}

public void setToto(int toto) {

this.toto = toto;

}

public final static void main(String args[]) {

Immut truc = new Immut();

truc.setToto(5);

truc.setToto(6);

}

}

显然,这个类不是最终的,并且该类应该在Eclipse中发出错误信号.但事实并非如此.

任何的想法?

编辑:我使用build.xml构建的jar文件似乎是正确的:它包含类文件,还包含Meta-INF / services / javax.annotation.processing.Processor文件,其中包含archipel.immutability.IsImmutableProcessor.我在我的测试项目中导入了这个jar文件,当我在我的Immut类中使用注释时(这只是一个粗略的测试),没有任何反应.

ant编辑java忽略注释_java – 注释不起作用相关推荐

  1. ant编辑java忽略注释_java – Ant警告:隐式编译的文件不受注释处理

    我在运行Ant构建脚本(Ant 1.8.2, Java 1.6)时收到此警告. [javac] warning: Implicitly compiled files were not subject ...

  2. java处理注释_Java注释处理器

    java处理注释 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...

  3. java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解

    四.如何对注释进行注释 这一节的题目读起来虽然有些绕口,但它所蕴涵的知识却对设计更强大的java程序有很大帮助. 在上一节讨论了自定义注释,由此我们可知注释在J2SE5.0中也和类.接口一样.是程序中 ...

  4. java快速注释_java注释多行/**/快捷键是什么

    展开全部 Ctrl+Shift+/ . 拓展资料: Java快捷键: 1. [ALT+/] 此快捷键为用户编辑的好帮手32313133353236313431303231363533e58685e5a ...

  5. java方法示例注释 @_Java注释和真实世界的Spring示例

    java方法示例注释 @ "注释"是编程语言定义的一种,并用作"标记". 可以将它们视为编程语言引擎可以理解的注释行. 它们不会直接影响程序的执行,但会直接影响 ...

  6. java三种注释_java注释的三种形式分别是什么

    java注释的三种形式分别是:1.单行注释,如[//单行注释]:2.多行注释,如[/*多行注释*/]:3.文档注释,如[/**@author*/]. JAVA的注释共有三种形式:单行注释.多行注释.文 ...

  7. java中的注释_Java注释中的/ **和/ *

    小编典典 第一种形式称为Javadoc.在为javadoc工具编写由程序生成的正式API时,可以使用此功能.例如,Java 7 API页面使用Javadoc并由该工具生成. 您将在Javadoc中看到 ...

  8. Java的反射作用_java反射机制的作用与优点

    java的反射机制就是增加程序的灵活性,避免将程序写死到代码里, 例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码 ...

  9. java 幽灵引用_Java 幽灵引用的作用

    原标题:Java 幽灵引用的作用 来源:imzoer, blog.csdn.net/imzoer/article/details/8044900 找实习的时候,面试大摩,就遇到了这个问题,当时真不该跟 ...

最新文章

  1. 入门经典综述!深度人脸识别算法串讲
  2. 高层定调!铁腕控炒房,2019下半年楼市基本不会涨了
  3. Flutter 仿掘金之动态Tabbar
  4. 说出你的个人知识问题!
  5. 文巾解题 面试题 01.02. 判定是否互为字符重排
  6. MAKEWPARAM 宏 及MAKELONG ,MAKELPARAM,MAKELRESULT
  7. 【DP】平铺方案(ybtoj DP-1-5)
  8. [vue] vue项目有做过单元测试吗?
  9. HTTP和HTTPS回顾
  10. C++函数的分文件编写
  11. python mac地址 js_使用Python从设备获取MAC地址
  12. 如何打开.azw3 .epub .mobi文件?
  13. 如何回答「你的优势和劣势是什么」?【面试核心问题6】
  14. 设计一个密码登录程序。要求: 设定用户名为lili,密码是123321。若用户名正确,密码也正确,则显示:“lili,欢迎您”
  15. HCIA-IoT 个人学习总结 Day3
  16. html+css实现星系图
  17. 大数据挖掘课程案例资源介绍
  18. Excel文件 实用操作小技巧
  19. HTML防止input回车提交表单
  20. centos换163(网易)源

热门文章

  1. Flutter进阶—网络和HTTP
  2. javaweb——Servlet开发
  3. mysql then_mysql语法之case when then与列转行
  4. 如何避免大规模线上故障?
  5. PHP 还有未来么,还是 25 岁就“寿终正寝”了?
  6. 什么是 “内存管理机制”?
  7. AR 圈最大收购案 Ubimax 10 亿“卖身”背后:究竟什么才是真正值钱的东西?
  8. 别纠结,提高代码整洁度也没那么难!
  9. 开源公司 HashiCorp 国内险遭禁,阿里、华为也要做好 B 计划?
  10. 为什么我们应该使用 Flutter?