最近我开始使用Kotlin v1.2和Intellij IDEA v2017.3.
我在Kotlin中实现了一个注释处理器,当一个类用支持的注释类型注释时,它在META-INF下编写一个资源文件.
我可以看到注释处理器正在使用另一个Maven项目,该项目将实现用作依赖项.如果我运行mvn clean compile
,META-INF下的文件在target/classes/META-INF中正确生成.
我的问题是,当源文件发生更改时,Intellij不会启动注释处理器.例如,如果我重命名带注释的Kotlin类.不会重新生成或更新资源文件.(我还没有看到注释处理器从Intellij工作......)
等中记载的IDE中我还启用了注释处理和配置"获得项目的classpath处理器" 在这里.
我作为Maven项目导入了这个项目,这里是我的pom.xml - 就像我说的:在使用Maven构建时它正在工作:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>usage</artifactId>
<version>1</version>
<properties>
<kotlin.version>1.2.0</kotlin.version>
</properties>
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<jvmTarget>1.8</jvmTarget>
</configuration>
<executions>
<execution>
<id>kapt</id>
<phase>generate-sources</phase>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
<annotationProcessors>
<annotationProcessor>org.example.MyProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</execution>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId> …
Run Code Online (Sandbox Code Playgroud) 查看 Java8 doc for OptionalInt
,似乎OptionalInt
无法通过设置新值或清空现有值来重用。此外,JavaDoc 仅展示了通过调用静态方法来初始化 OptionalInt 的两种方法 - 看起来像一个不可变的对象。
真的不能重复使用吗?
想象一个批处理,其中要处理的数据由一个 int 原语组成,它可以是可选的。对于每一行(假设是数百万行)OptionalInt
,必须创建一个新对象。目标是避免不必要的对象实例化和额外的垃圾收集。所以我宁愿自己重新实现它并避免使用 Java8 实用程序类OptionalInt
?