如果类只有构造函数,我应该在类中声明变量吗?

时间:2015-03-07 06:41:35

标签: java syntax coding-style

我们说我有一个班级:

public class Foo {
    private int x;
    private int y;
    public Foo(int x, int y) {
        this.x = x;
        this.y = y;
        /**
         * here comes a lot of code within this constructor
         * that uses these x and y variables.
         */
    }
}

我明白,如果我在这个类中有一些其他方法可以使用x和y变量,我应该像上面那样将构造函数的参数复制到字段中,但是如果我没有&#该怎么办? 39; t有任何其他方法,但只有构造函数?我是否仍然应该创建字段,或者我的类应该如下所示:

public class Foo {
    public Foo(int x, int y) {
        /**
         * here comes a lot of code within this constructor
         * that uses these x and y variables.
         */
    }
}

什么是正确的风格?

更新

抱歉,我认为这样做的一般模式是错误的,这就是为什么我给出了一些空闲的例子。我仍然不会复制粘贴我的代码,因为项目太大而且单个类的脱离上下文没有任何意义。但这是一个更具体的例子:

import javax.swing.JLabel;
import javax.swing.JPanel;

public class InformationPanel extends JPanel {
    private JLabel nameLbl = new JLabel();

    public InformationPanel(Student student) {
        nameLbl.setText(student.getName());
        this.add(nameLbl);
    }

}

所以在这种情况下我应该有一个本地字段

private Student student;

然后:

this.student = student;

或者我不应该?

4 个答案:

答案 0 :(得分:1)

构造函数用于初始化对象的状态。根据您的问题,您的对象没有状态。

您的构造函数接受一些仅在构造函数中使用的参数。您的构造函数不会产生任何输出。虽然我不知道你在这个构造函数中有什么逻辑,但似乎你正在使用构造函数,就好像它是一个静态方法。为什么不把你的逻辑放在静态方法中呢?

答案 1 :(得分:1)

首先是首选款式。但是,这种情况的答案可能是:使用静态方法,不要使用构造函数。

如果您只想要在构造函数方法中编码的功能,那么可以采用静态方法。

由于构造函数用于创建类的新实例,它结合了功能(通过其他方法)和状态(通过字段),因此很难看出无状态,无方法实例将如何使用。因此我猜测你所追求的是:

public class Foo {

    public static void doSomething(int x, int y) {
       /**
         * here comes some code within this method
         * that uses these x and y variables.
         */
    }
}

最后一部分是 - 不要在单个方法中放入大量代码,除非它真的属于那里。模块化思考并将方法分解为可以测试的部分。

答案 2 :(得分:0)

如果值仅在构造函数中使用,则不应将值存储在字段中。

但是,更重要的是,您正在做的事情不适合构造函数。由于创建的结果对象似乎没用。

答案 3 :(得分:0)

不要理解为什么你需要一堂课才能达到你想要的目标。根据您的用例,它应该是另一个类中的方法或包含静态方法的Utility类。但这一切都取决于你要做的事情或背景。