我正在为firebase事件创建自定义注释。我的灵感来自official android docs和其他@StringDef
注释。它看起来像这样:
@Retention(SOURCE)
@StringDef({
EVENT_1, EVENT_2
})
@Size(max = 32) // firebase limit
public @interface UserActivityEvents {
String EVENT_1 = "ev_1";
String EVENT_2 = "really_long_event_name_that_exceeds_32_chars_limit";
...
}
封装日志记录的类定义如下:
public class UserActivityEvent {
private @UserActivityEvents String eventName;
private UserActivityEvent() {
}
public UserActivityEvent(@UserActivityEvents String eventName) {
this.eventName = eventName;
}
...
}
问题在于,无论我在构造函数中指定的是什么,都不会触发AS lint,即使我做了类似的事情:
new UserActivityEvent("asd");
我对@UserActivityEvents
的期望是:
UserActivityEvent
构造函数中的参数只能是@StringDef 修改:我发现如果我在EVENT_3
中定义了一个新事件UserActivityEvents
,但未将其包含在@UserActivityEvents
中,我会尝试将其引用为new UserActivityEvent(UserActivityEvents.EVENT_3)
,皮棉被正确触发并说:“必须是以下之一:EVENT_1,EVENT_2或长度必须至多为32”。如果使用new UserActivityEvent("asd")
则无效