我们说我有一个班级:
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;
或者我不应该?
答案 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类。但这一切都取决于你要做的事情或背景。