ZenMembers 和 ZenProperties
Link to zenmembers-和-zenproperties
ZenMembers 是 ZenObject 的成员。
可以使用 object.member
访问之。 成员可以是能被设置、获得的或两者都是。
Getters 和 Setters
Link to getters-和-setters
ZenGetter 有两种类型:ZenGetters 和 ZenMemberGetters。
那么,区别是什么?
一般应使用 @ZenGetter(值)
,除非有许多返回相同类型的成员,或你不确切了解的成员。
在这种情况下你可以使用 @ZenMemberGetter
。
那么,区别是什么?
- 带有
@ZenGetter(value)
注解的方法不需要任何参数,而带有@ZenMemberGetter
注解的方法需要一个表示成员名称的字符串参数。 - MemberGetter 只在没有找到其他 getter 时才会被执行。
- 如果你只需要获得一个小的属性,你应该使用
@ZendGetter(value)
这同样适用于 ZenSetters/ZenMemberSetters。
ZenProperty
Link to zenproperty
@ZenProperty
注解是 @ZenGetter(value)
和 @ZenSetter
的结合。
此注解只能应用于公开字段(如 public String name
)。
此注解可以有这些参数:
String value
:属性名称(在 ZS 中你调用 object.value)。 当忽略时,则使用字段名。String getter
:对应 Getter 方法的名称(它可能不带有 ZenGetter 注解)。- 如果未设置或为
""
,将会使用set + value
- 当被注解的字段不是 boolean 类型时为
get + value
- 当被注解的字段是 boolean 类型或 Boolean 类型时为
is + value
- 当被注解的字段不是 boolean 类型时为
- 当为
null
时,将不会注册 ZenGetter
- 如果未设置或为
String setter
:对应 setter 方法的名称(它可能不带有 ZenSetter 注解)。- 如果未设置或为
""
,将会使用set + value
- 当为
null
时,将不会注册 ZenSetter
- 如果未设置或为
如果你使用 @ZenProperty
你甚至可以同时忽略 getter/setter 方法。
如果你使用这些方法,你仍然需要添加 @ZenMethod
。当你忽略这个方法时它会自动被生成。
ZenGetters 的例子
Link to zengetters-的例子
Copy@ZenClass("crafttweaker.oredict.IOreDict")
@IterableSimple("crafttweaker.oredict.IOreDictEntry")
@ZenRegister
public interface IOreDict extends Iterable<IOreDictEntry> {
@ZenMemberGetter
@ZenOperator(OperatorType.INDEXGET)
@ZenMethod
IOreDictEntry get(String name);
@ZenGetter("entries")
List<IOreDictEntry> getEntries();
@ZenOperator(OperatorType.CONTAINS)
@ZenMethod
boolean contains(String name);
}
ZenProperties 的例子
Link to zenproperties-的例子
ContentTweaker 的 MCAxisAlignedBB
Copy@ZenRegister
@ZenClass("mods.contenttweaker.AxisAlignedBB")
public class MCAxisAlignedBB implements ICTObject<AxisAlignedBB> {
@ZenProperty
public double minX = 0.0;
...
@ZenMethod
public double getMinX() {
return minX;
}
@ZenMethod
public void setMinX(double minX) {
this.minX = minX;
}
...
}