使用Kotlin 1.0.0版本(在IntelliJ 15中编译)。
println(myPojoInstance.foo)
当它试图编译引用基于Lombok的Pojo的代码(在IntelliJ或Gradle中)时,它给出错误“无法访问‘foo’:它在‘MyPojo’中是‘private’。这是真的,它们都是私有的,我的对象有@Value @Builder用于lombok注释。
我已经尝试专门调用getFoo(),但是它显示“getFoo的未解析引用”。也许有一些技巧可以让Kotlin知道如何处理lombok注释?
正如上面评论中提到的,delombok有所帮助。在maven build的情况下,应该是:
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>${lombok.version}.0</version>
<executions>
<execution>
<id>delombok</id>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
<configuration>
<formatPreferences>
<javaLangAsFQN>skip</javaLangAsFQN>
</formatPreferences>
<verbose>true</verbose>
</configuration>
</execution>
<execution>
<id>test-delombok</id>
<phase>generate-test-sources</phase>
<goals>
<goal>testDelombok</goal>
</goals>
<configuration>
<verbose>true</verbose>
</configuration>
</execution>
</executions>
</plugin>
有一个lombok的Kotlin编译器插件。它仍然是实验性的,可以与Gradle或Maven一起使用。
它只支持满手的注释,包括
@Getter
,@Setter
@noargsconstuctor
,@RequiredArgsConstructor
和@allargsconsttructor
@Data
@With
@Value
似乎按预期工作。不幸的是,它们不支持@Builder
注释,但您可以请求在YouTrack中添加
有关详细信息,请参阅kotlin留档中的Lombok编译器插件。
上面提到的@Builder
注释票证已修复!修复的目标版本是1.8.0-Beta
。
一般来说,不,它没有。这种行为的原因是Lombok是javac的注释处理器,但是当kotlin编译器运行时,它也使用javac,但没有注释处理,所以这就是为什么kotlin看不到尚未生成的声明。
目前唯一的解决方法是定义严格的编译顺序:先Java,然后kotlin。不幸的是,这种方法有很大的缺点:在这种情况下,您不能使用Java中的Kotlin代码。要解决这个问题,您可能需要一个多模块项目,这可能会造成很多痛苦
不工作的Kotlin代码如下所示: 我省略了(我相信)没有必要重现这个问题的代码。 Kotlin代码实际上是编译的,但在运行时,它在线程“main”java.lang.IllegalAccesserRor中抛出访问类foo.bar.utils.foo$bar$qux。当悬停在上时,IntelliJ显示一个提示,提示中定义了:public/*package*/open class Qux,所以在此上
我正在开发一个使用反射的库,我想操纵给定KClass的所有属性/函数。 使用属性,我可以操作所有可访问的成员(根据留档),即:公共、内部和受保护的字段、属性和函数。但是我看不到私有的。 使用Java反射,我可以使用,同样,我可以看到使用类的私有方法。getDeclaredMethods()。 有没有办法使用kotlin反射API来实现这一点?
问题内容: 我有这段Java代码: 我想在Kotlin中获得MainActivity对象。自动转换在处中断。 问题答案: 您可以通过使用合格的来获得对Kotlin中对象的引用。例如:
问题内容: 是否可以从Java代码访问扩展功能? 我在Kotlin文件中定义了扩展功能。 (生成的)java类在哪里。现在,我想用普通的Java代码访问它: 但是,这不起作用。 IDE无法识别该方法,并且编译失败。 起作用的是与kotlin的静态函数一起使用: 通过使用我的IDE似乎已正确配置。 我从kotlin文档中搜索了整个Java互操作文件,并且在谷歌上搜索了很多,但是找不到。 我究竟做错了
我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。