Skip to content

@Accessor

@Accessor 注解用于自动生成目标类中字段的 gettersetter 方法。这使得你可以访问和修改私有(private)字段。

用法

@Accessor 注解在一个抽象方法上,Mixin 会在编译时自动实现这个方法。

生成 Getter

要为一个字段生成 getter,你需要声明一个无参数的方法,其名称遵循 Java Bean 规范(例如,getXisX)。返回类型必须与字段类型匹配。

示例:

目标类:

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 的。