Java 创建getter/setter时出现意外结果

Java 创建getter/setter时出现意外结果,java,xpages,naming-conventions,Java,Xpages,Naming Conventions,当我创建一个JAVA类时,我设置了一些私有变量,然后让它创建getter和setter。当我这样做的时候,我得到了一些奇怪的结果。下面是该类的代码片段: private String xPageName; private String nameXPage; public String getXPageName() { return xPageName; } public void setXPageName(String pageName) { xPageName

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

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命名约定与小写第一个字母和大写第二个字母有所不同?

JAVA中方法名称的约定是,这意味着第一个单词是小写的,接下来的所有单词都是大写的


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

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

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进行大写是问题所在

我想你指的是一个不使用“this”关键字的setter? 这当然很奇怪,但如果你愿意,你可以加上它。
这段代码是由DDE的Java编辑器生成的吗?从未有过这种效果…

这种行为似乎是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实际上很奇怪。当您选择“源/生成getter和setter…”时,将创建setter的这个“特殊”参数。因为参数名与私有字段名不同,所以不需要添加“this”

虽然这很奇怪,但并不意味着它错了。但是,它并没有真正遵循通常的惯例

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


在Eclipse中(Juno)工作正常。

no,这是setter和getter方法的java模式。您能发布您希望“it”创建的代码吗?(我假设这里的“it”是“xpages”?你的问题并不十分清楚。)如果你自动生成setter/getter,这个工具可能会使用camel case变量命名约定。显然,你可以违背惯例,给它取个别的名字。但有一个原因是存在约定。是的,我在Notes Designer中使用JAVA编辑器DDE-出于某种原因,它似乎错过了这一点。另外,setXPageName中缺少x,应该是this.xPageName=xPageName而不是this:public void setXPageName(String pageName){xPageName=pageName;}我尝试了aPageName,得到了相同的结果,它似乎被一个单字符小写名字搞糊涂了。如果我插入变量xxPageName,它将正确设置getter和setter。非常奇怪。嗯,作为一个我发布的帖子:我从来没有遇到过这个问题,尽管我在我当前的项目中过度使用它。你为此创建了PMR吗?我想你可以通过一个首选项强制输入“this”。但总体来说,我认为代码应该很好,变量定义行末尾的+1可以正常工作。只要第一个工作是2个或更多的小写字母,source.create setters&getter就可以很好地工作。请参见上面Knut的测试结果。我在aPageName和aaPageName上进行了测试,结果相同。到目前为止,我从未有过这种效果,因为我总是在新的私有字段行的末尾按STRG+1,然后正确地生成getter和setter客场。这是不寻常的,我做了一个1,在队伍的末尾创建了getter和setter,它按照我的预期工作。因此,source/create getter&setter的工作方式与私有字符串xPageName末尾的1稍有不同;线路。有趣。是的,这是不寻常的,在这种情况下是一种变通方法。很高兴你了解了我对STRG的意思-它是德语键盘上CTRL键的名称:-)。是的,CTRL+1创建了正确的setter。请参见Knut在其答案中的注释。通过选择右键单击/Source/creategetter&setters创建getter和setter。所以在我的例子中,我没有忘记它们是如何为我创建的。如果使用私有字符串xPageName+1你得到的是你所期望的那种能手和能手。