1 回答

TA貢獻1785條經驗 獲得超4個贊
您應該使用適當的使用站點目標來限定注釋:
@field:ExcludeFromJSON private?var?password:?String
這將導致注釋出現在此屬性生成的 Java 字段上。
來自Kotlin Reference?regarding?Annotation Use-site Targets:
當您注釋屬性或主要構造函數參數時,有多個 Java 元素是從相應的 Kotlin 元素生成的,因此在生成的 Java 字節(jié)碼中有多個可能的注釋位置。[...]
[...]
支持的使用站點目標的完整列表是:
file
;
property
(具有此目標的注釋對 Java 不可見);
field
;
get
(財產獲取者);
set
(屬性設置器);
receiver
(擴展函數或屬性的接收參數);
param
(構造函數參數);
setparam
(屬性設置器參數);
delegate
(存儲委托屬性的委托實例的字段)。[...]
如果您不指定使用站點目標,則根據
@Target
所使用的注釋的注釋來選擇目標。如果有多個適用目標,則使用以下列表中的第一個適用目標:
param
;
property
;
field
.
要擺脫的三件重要事情是:
Kotlin 中的注釋在最終應用位置方面存在一定程度的歧義1 。例如,將注釋放置在您所做的位置意味著可以將注釋應用于至少五個不同位置之一:屬性、字段、getter、setter、setter 參數。
應用于 Kotlin 屬性的注解在 Java 端是不可見的。
如果 Kotlin 屬性上的注解沒有 use-site 目標,則僅當它不適用于 Kotlin 屬性時才會應用于支持字段。
您的注釋在其注釋中同時包含AnnotationTarget.FIELD
和。由于您沒有指定 use-site 目標,因此該屬性優(yōu)先——這意味著注釋對 Java 不可見。AnnotationTarget.PROPERTY
@Target
添加回答
舉報