如何减少Java构造函数的重复性和膨胀?

如何减少Java构造函数的重复性和膨胀?,java,eclipse,Java,Eclipse,我希望避免定义“C-struct-like”类时重复的代码膨胀和键入繁琐,如: class Foo { int x; float y; String z; public Foo(int x, float y, String z) { this.x = x; this.y = y; this.z = z; } } ??例如,这里有什么Eclipse技巧可能有用吗 要了解我所说的“代码膨胀”是什么意思,请将上述

我希望避免定义“C-struct-like”类时重复的代码膨胀和键入繁琐,如:

class Foo {
    int x;
    float y;
    String z;
    public Foo(int x, float y, String z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}
??例如,这里有什么Eclipse技巧可能有用吗

要了解我所说的“代码膨胀”是什么意思,请将上述内容与在C中定义相应结构所需的内容进行比较:

struct foo {
    int x;
    float y;
    char *z;
}

每个成员字段只被提及一次,而在Java代码中它需要被提及三次(其中一次以相应的构造函数参数的形式出现)。

不幸的是,在Java中,如果要在构造函数中初始化这些值,就无法绕过这一点。如果您对另一种JVM语言开放,Scala有一个解决方案


编辑:您可以将所有字段公开。理论上,这是个坏主意。实际上,有时它是正确的解决方案。

在eclipse中,您可以右键单击java编辑器中的source->generate constructors using fields。
我想这就是您想要的。

Eclipse在源代码菜单中有一个“使用字段生成构造函数…”。

您也可以在Java中这样做,但这违反了基本的OOP原则:

class Foo {
    public int x;
    public float y;
    public String z;
}
另一类:

Foo foo = new Foo();
foo.x = 1;
// etc..
就像
C
s结构一样:

struct Foo {
   int x;
   float y;
   char *z;
};

struct Foo foo;
foo.x = 1;
// etc...

是的,但是在C语言中你不能隐藏那些成员。封装的代价有时是冗长的。(如果您不想隐藏它们,那么即使在Java中也不需要冗长。)如果您的字段是public或package private,并且不是final,那么您真的需要一个设置它们的构造函数吗?您可以在代码< Foo> <代码>实例化之后设置它们。此外,C++代码不生成构造函数。谢谢DLV从WAT->纠正我的“文本LINO”。我会处理的!是的,这就是路。使用此快捷方式,您只需键入所需的三行,其余的由eclipse处理。还有一个快捷键:Alt+Shift+S,O