Java 用于生成Getter/Setter的类布尔处理
我们希望在名称以“is”-前缀开头时,使用lombok getter/setter将Java 用于生成Getter/Setter的类布尔处理,java,lombok,Java,Lombok,我们希望在名称以“is”-前缀开头时,使用lombok getter/setter将布尔值处理为布尔值。龙目山有没有办法做到这一点 在Java(以及SQL和JavaScript)中,我们总是使用成员变量的“is”前缀作为编码约定。对于boolean类型,我们非常满意getter/setter的默认lombok行为。现在,我们还希望为布尔s实现相同的生成逻辑,但lombok默认值在布尔和布尔之间有所不同 我尝试了以下方法: @Data public class BooleanChallenge {
布尔值
处理为布尔值
。龙目山有没有办法做到这一点
在Java(以及SQL和JavaScript)中,我们总是使用成员变量的“is”前缀作为编码约定。对于boolean
类型,我们非常满意getter/setter的默认lombok行为。现在,我们还希望为布尔
s实现相同的生成逻辑,但lombok默认值在布尔
和布尔
之间有所不同
我尝试了以下方法:
@Data
public class BooleanChallenge {
// @Getter @Setter just work fine for boolean
private boolean isSmallBoolean;
// Boolean are handled different
private Boolean isBigBoolean;
@Accessors(fluent = true)
private Boolean isFluentAccessor;
@Accessors(prefix = "is")
private Boolean isWithPrefix;
@Accessors(prefix = "is", fluent = true)
private Boolean isWithPrefixAndFluent;
private void useThoseGetterzAndSetterz() {
this.isSmallBoolean(); // ✔ "is"-prefix for getter
this.setSmallBoolean(true); // ✔ "set"-prefix for setter
this.getIsBigBoolean(); // ❌ "get is"
this.setIsBigBoolean(true); // ❌ "set is"
this.isFluentAccessor(); // ✔
this.isFluentAccessor(true); // ❌ "is"-prefix instead of "get" prefix
this.getWithPrefix(); // ❌ no "is"-prefix
this.setWithPrefix(true); // ✔
this.withPrefixAndFluent(); // ❌
this.withPrefixAndFluent(true); // ❌
}
}
这里有一些东西
布尔值字段前面加前缀。
这是可怕和荒谬的,因为,
JavaBean规范规定,必须命名布尔
字段的getter
isFieldName
,它变为isisblamy()
。
不要把一种可怕的做法当作你的惯例。
看来可怕的事情就要发生了。
此外,Lombok可以识别糟糕的性能并生成正确的getter方法
(isBlammy()
,在示例中)
Boolean
getter的正确(符合JavaBean规范)名称
(注意大写“B”)字段是getFieldName
。
这是故意的,不是错误。
Lombok生成兼容的getter方法Boolean
的时间是null
为有效值时(即可能发生)。
如果fluentAccessor不能为空,
将其更改为boolean
自动装箱将解决您的问题
当null
是合法的可能值时,
Boolean
是合适的,而Boolean
不是一个选项
其他内容
由于更改糟糕的命名约定不是一个选项,
您必须自己创建getter
以下是一个例子:
// Disable the Lombok getIsHooty method creation.
@Getter(AccessLevel.NONE)
private Boolean isHooty;
public Boolean isHooty()
{
return isHooty;
}
这里有一些东西
布尔值字段前面加前缀。
这是可怕和荒谬的,因为,
JavaBean规范规定,必须命名布尔
字段的getter
isFieldName
,它变为isisblamy()
。
不要把一种可怕的做法当作你的惯例。
看来可怕的事情就要发生了。
此外,Lombok可以识别糟糕的性能并生成正确的getter方法
(isBlammy()
,在示例中)
Boolean
getter的正确(符合JavaBean规范)名称
(注意大写“B”)字段是getFieldName
。
这是故意的,不是错误。
Lombok生成兼容的getter方法Boolean
的时间是null
为有效值时(即可能发生)。
如果fluentAccessor不能为空,
将其更改为boolean
自动装箱将解决您的问题
当null
是合法的可能值时,
Boolean
是合适的,而Boolean
不是一个选项
其他内容
由于更改糟糕的命名约定不是一个选项,
您必须自己创建getter
以下是一个例子:
// Disable the Lombok getIsHooty method creation.
@Getter(AccessLevel.NONE)
private Boolean isHooty;
public Boolean isHooty()
{
return isHooty;
}
这是我的50美分:
boolean
是二进制/双态,而boolean
是三元/三态,因为它需要true
、false
和null
,或者更准确地说,boolean.true
、boolean.false
、任何自建对象和null
当有一个函数isSomething
时,您希望它返回true或false,而不是null。所以一个可能的null
值可能会把事情搞砸
尽管如此,我不能真正帮助你解决你的实际问题。我可以建议您增强Lombok库,以便它创建将
Boolean
返回值转换为Boolean
s的函数,并为defaultif null
和defaultfalse if null
行为提供一些默认注释。但这种带有“隐藏转换”的方法看起来已经相当粗糙了。这是我的50美分:boolean
是二进制/双态,而boolean
是三元/三态,因为它需要true
,false
和null
,或者更准确地说,boolean.true
,boolean.false
,任何自创对象,和null
当有一个函数isSomething
时,您希望它返回true或false,而不是null。所以一个可能的null
值可能会把事情搞砸
尽管如此,我不能真正帮助你解决你的实际问题。我可以建议您增强Lombok库,以便它创建将
Boolean
返回值转换为Boolean
s的函数,并为defaultif null
和defaultfalse if null
行为提供一些默认注释。但这种带有“隐藏转换”的方法看起来已经相当粗糙了。只是为了保持编码惯例,您的实际问题是什么?如果您对Lombok有意见或改进建议,为什么不通知Lombok团队呢?但也许他们有理由不遵循“是…”的推理?没有什么能阻止你添加它们