【问题标题】:Why do Intellij default getter/setter templates delete my boolean "is" variable name prefix?为什么 Intellij 默认的 getter/setter 模板会删除我的布尔“is”变量名前缀?
【发布时间】:2016-06-14 01:10:59
【问题描述】:

我有一个实体。我将变量定义为布尔值,并使用 Intellij Idea Shortcuts 创建了 Getter 和 Setter 方法。

private Boolean isForLaboratory = false;

创建后它生成了这个:

public Boolean getForLaboratory() {
    return isForLaboratory;
}

public void setForLaboratory(Boolean forLaboratory) {
    isForLaboratory = forLaboratory;
}

我期待 getIsForLaboratory 和 setIsForLaboratory。它是Java的通用约定吗?为什么 Intellij 删除了我的前缀?

【问题讨论】:

  • Boolean 是一个包装类,使用小写的原始布尔值。是的,在 getter/setter 中省略是约定俗成的。考虑 isPlaying。我们将设置为 Playing and get Playing or not。
  • 这是一个约定。 IntelliJ 假设基本名称是 ForLaboratory 并且 is 部分仅存在,因为您使用的是布尔值。试试String isForLaboratory,你会看到的。

标签: java intellij-idea coding-style


【解决方案1】:

如果弹出对话框到GenerateGetter and Setter,可以看到:

Getter template: IntelliJ Default
Setter template: IntelliJ Default

点击Getter Template右侧标有...的按钮,可以看到模板代码包括以下内容:

#if ($StringUtil.startsWithIgnoreCase($name, 'is'))
  #set($name = $StringUtil.decapitalize($name))
#else
  is##

换句话说,对以is 开头的字段有特殊处理——如果你想编写自己的模板,你当然可以这样做:)

至于为什么 - 有一个用于布尔字段的 javabeans 标准,其中名为(例如)boolean enabled 的字段的 getter 可以是 isEnabled() 而不是 getEnabled(),这肯定与此有关。

【讨论】:

  • 建议:也许将您的财产重命名为forLaboratory。因此,getter 将是 isForLaboratory() - 每个默认模板。
【解决方案2】:

在 IntelliJ 版本 15+ 中,您必须使用原始布尔值来使 IntelliJ 生成带有“is”前缀的 Get 函数。

默认的Getter Template 如下所示:

#if ($field.boolean && $field.primitive)
  #if ($StringUtil.startsWithIgnoreCase($name, 'is'))
    #set($name = $StringUtil.decapitalize($name))
  #else
    is##
#end

所以 IntelliJ 15.x 及更高版本中的正确方法应该是这样的:

private boolean forLaboratory = false;

自动生成后:

public boolean getForLaboratory() {
    return forLaboratory;
}

public void isForLaboratory(boolean forLaboratory) {
    this.forLaboratory = forLaboratory;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多