【问题标题】:Unexpected result when creating Getters/Setters创建 Getter/Setter 时出现意外结果
【发布时间】:2014-07-25 17:25:32
【问题描述】:

当我创建一个 JAVA 类时,我设置了一些私有变量,然后让它创建了 getter 和 setter。当我这样做时,我得到了一些奇怪的结果。这是该类的代码sn-p:

private String xPageName;
private String nameXPage;

public String getXPageName() {
        return xPageName;
}
public void setXPageName(String pageName) {
        xPageName = pageName;
}
public String getNameXPage() {
        return nameXPage;
}
public void setNameXPage(String nameXPage) {
        this.nameXPage = nameXPage;
}

变量 xPageName 的 getter 和 setter 与我预期的不同。我创建了另一个变量 aPageName 并得到了同样奇怪的结果 getter 和 setter。是否有一个 JAVA 命名约定对小写第一个字母和大写第二个字母有不同的作用?

【问题讨论】:

  • 不,这是 setter 和 getter 方法的 java 模式
  • 您能发布您期望“它”创建的代码吗? (我假设这里的“它”是“xpages”?你的问题不是很清楚。)
  • 如果您自动生成了 setter/getter,该工具可能使用了驼峰式变量命名约定。显然,您可以违反约定并将其命名为其他名称。但存在约定是有原因的。

标签: java xpages naming-conventions


【解决方案1】:

这种行为似乎特定于 Domino Designer(8.5.3 和 9.0.1)。它确实创建了以下设置器:

private String aaPage;
private String aPage;
private String aPa;
private String aP;
private String a;

public void setAaPage(String aaPage) {
    this.aaPage = aaPage;
}
public void setAPage(String page) {
    aPage = page;
}
public void setAPa(String pa) {
    aPa = pa;
}
public void setAP(String ap) {
    aP = ap;
}
public void setA(String a) {
    this.a = a;
}

中间生成的三个 setter 实际上很奇怪。当您选择“Source / Generate Getters and Setters...”时,会创建这个 setter 的“特殊”参数。因为参数名和私有字段名不同所以不需要加上“this”。

虽然很奇怪,但这并不意味着它是错误的。但是,它并没有真正遵循通常的约定......

如果您在private String ... 行中单击 STRG+1 并选择“为'...'创建 getter 和 setter”,则会以正常方式生成 Setter。

在 Eclipse (Juno) 中一切正常。

【讨论】:

  • 我对 aPageName 和 aaPageName 进行了测试,结果相同。
  • 到目前为止我从未有过这种效果,因为我总是在新的私有字段行的末尾按 STRG+1 并立即生成 getter 和 setter。
  • 这很不寻常,我做了一个 1 并在行尾创建了 getter 和 setter,它按我的预期工作。所以 source/create Getters & setters 的工作方式与私有字符串 xPageName 末尾的 1 有点不同;线。很有趣。
  • 是的,这是不寻常的,在这种情况下是一种解决方法。很高兴你发现了我对 STRG 的意思——它是德语键盘上 CTRL 键的名称 :-)。所以是的,CTRL+1 创建了正确的设置器。
【解决方案2】:

java中方法名的约定是CamelCase,意思是第一个单词小写,后面的单词全部大写。

这就是为什么 xPageName 中的 x 被视为一个单词,当它不再是第一个单词时(如在 getXPageName 中)变为大写。

【讨论】:

    【解决方案3】:

    我认为您的意思是不使用“this”关键字的一个二传手? 这肯定很奇怪,但如果你愿意,你可以添加它。 这段代码是由 DDE 的 Java 编辑器生成的吗?从来没有那种效果...

    【讨论】:

    • 是的,我在 Notes Designer 中使用 JAVA Editor DDE - 由于某种原因,它似乎错过了这个。 setXPageName 中也缺少 x,应该是 this.xPageName = xPageName 而不是 this: public void setXPageName(String pageName) { xPageName = pageName;我尝试了 aPageName 并得到了相同的结果,它似乎被单个字符的小写名字混淆了。如果我关心一个变量 xxPageName 它会正确设置 getter 和 setter。很奇怪。
    • 嗯,正如我所发布的:尽管我在当前项目中过度使用它,但从未遇到过这个问题。您是否为此创建了 PMR?
    • 我认为您可以通过首选项强制输入“this”。但总的来说,我认为代码应该没问题。
    • 变量定义行末尾的 +1 工作正常。只要第一个工作是 2 个或更多小写字母,source.create setter & getter 就可以正常工作,请参阅上面 Knut 的测试结果。
    【解决方案4】:

    您可能忘记了 setxPageName 中的“this”。我在 spring 工具套件中使用了自动 getter 和 setter 生成器,得到了这个:

    private String xPageName;
    private String nameXPage;
    
    public String getxPageName() {
        return xPageName;
    }
    public void setxPageName(String xPageName) {
        this.xPageName = xPageName;
    }
    public String getNameXPage() {
        return nameXPage;
    }
    public void setNameXPage(String nameXPage) {
        this.nameXPage = nameXPage;
    }
    

    所以也许在你的 xPageName 函数中使用 x 是个问题

    【讨论】:

    • 在他的回答中查看来自 Knut 的 cmets。 getter 和 setter 是通过选择 Right Click/Source/Create Getter & Setter 创建的。所以在我的例子中,我没有忘记它们是如何为我创建的。如果你去 private String xPageName;+1 你会得到你所期望的 getter & setter。
    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 2013-11-07
    • 2015-05-30
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多