@Accessor
@Accessor
注解用于自动生成目标类中字段的 getter
和 setter
方法。这使得你可以访问和修改私有(private)字段。
用法
@Accessor
注解在一个抽象方法上,Mixin 会在编译时自动实现这个方法。
生成 Getter
要为一个字段生成 getter
,你需要声明一个无参数的方法,其名称遵循 Java Bean 规范(例如,getX
或 isX
)。返回类型必须与字段类型匹配。
示例:
目标类:
java
public class Entity {
private int entityId;
}
Mixin:
java
@Mixin(Entity.class)
public interface EntityAccessor {
@Accessor("entityId")
int getEntityId();
}
现在你可以将 Entity
对象转换为 EntityAccessor
接口,并调用 getEntityId()
来获取 entityId
字段的值。
生成 Setter
要生成 setter
,你需要声明一个带一个参数的方法,名称以 set
开头。返回类型为 void
。
示例:
java
@Mixin(Entity.class)
public interface EntityAccessor {
@Accessor("entityId")
void setEntityId(int id);
}
这将允许你修改 entityId
字段。
value
属性
value
属性是可选的。如果你不指定 value
,Mixin 会尝试根据方法名推断目标字段名(例如 getEntityId
-> entityId
)。如果字段名与方法名不匹配,或者有歧义,你就需要明确指定 value
。
示例:
java
// 目标字段名是 "internalId",但我们想让 getter 名为 "getId"
@Accessor("internalId")
int getId();
使用类而不是接口
你也可以在 Mixin
类(而不是接口)中使用 @Accessor
。
java
@Mixin(Entity.class)
public abstract class EntityMixin {
@Accessor("entityId")
abstract int getEntityId();
}
在这种情况下,方法需要是 abstract
的。