问题描述
JEP 256:BeanInfo Annotations 提供了 JavaBean
和 href="http://download.java.net/java/jdk9/docs/api/java/beans/BeanProperty.html" rel="nofollow noreferrer">BeanProperty
注释.虽然没有太多文档,但我一直希望这将允许我们使用注释将类上的字段指定为 JavaBean 样式的属性,而无需创建样板 getter/setter 访问器/mutator 方法.
所以:
public class Person {
private String name ;
public String getName( ) {
return this.name ;
}
public void setName( String nameArg ) {
this.name = nameArg ;
}
}
……会变成这样:
import java.beans.BeanProperty;
public class Person {
@BeanProperty
public String name ;
}
然而,当我在 IntelliJ 2017.2.2 的 Java 9 项目中尝试此操作时,我在 IDE 中的@"注释上收到错误消息:
Yet when I try this in a Java 9 project in IntelliJ 2017.2.2, I get error in the IDE on the "@" annotation saying:
'@BeanProperty' 不适用于字段
编译器报错:
错误:(8, 5) java: 注释类型不适用于这种声明
➠ 我是否误解了这些新注释的目的?或者我有一些语法问题?
➠ Have I misunderstood the purpose of these new annotations? Or do I have some syntax problem?
除了上面链接的 JEP 和 JavaDoc 之外,我没有找到任何文档.
I have not found any documentation other than the JEP and JavaDoc linked above.
我正在试验 Java 9 的最新候选版本,目前是 macOS Sierra 10.12.6 上的 Java 9+181.
I am experimenting with the recent release candidates for Java 9, currently Java 9+181 on macOS Sierra 10.12.6.
推荐答案
javadoc 说 BeanProperty
是 @Target(METHOD)
.貌似是自定义PropertyDescriptor
s 而无需创建 BeanInfo
实现.我不认为它的目的是像 Lombok 那样工作.(谢天谢地——请参阅为什么使用 getter 和 setter? 了解所有显式方法的原因是个好主意.)
The javadoc says BeanProperty
is @Target(METHOD)
. Looks like it’s a way to customize PropertyDescriptor
s without having to create a BeanInfo
implementation. I don’t think it was intended to work like Lombok. (And thank goodness—see Why use getters and setters? for all the reasons explicit methods are a good idea.)
这篇关于如何在 Java 9 中使用新的 BeanInfo Annotations的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!