我在下面的代码中担心的是,构造函数的参数实际上并未直接映射到类的实例字段。实例字段从参数获取值,而我正在使用initalize方法。此外,我做了一些工作,以便可以在随后的代码中直接使用创建的对象,例如,调用drawBoundaries()。我感觉它在做抽象意义上的创建(初始化)画布的意思。
我的构造函数做得太多吗?如果我添加方法从外部显式调用构造函数中的内容,那将是错误的。请让我知道您的意见。
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
public Canvas(ParsedCells seedPatternCells) {
initalizeCanvas(seedPatternCells);
}
private void initalizeCanvas(ParsedCells seedPatternCells) {
setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
drawBoundaries();
placeSeedPatternCellsOnCanvas(seedPatternCells);
}
...
PS:对不起,这看起来像是一个愚蠢的问题;我的代码将由OOP专家审查,我只是担心:-0
编辑:
我读到一些有关initalizeCanvas()中的方法被重写的担忧-幸运的是,这些方法是私有的,并且不调用任何其他方法。
无论如何,在对网络进行进一步研究之后,我开始更喜欢这种方式了……我希望你们同意!
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
private Canvas() {
}
public static Canvas newInstance(ParsedCells seedPatternCells) {
Canvas canvas = new Canvas();
canvas.setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
canvas.drawBoundaries();
canvas.placeSeedPatternCellsOnCanvas(seedPatternCells);
return canvas;
}
对于构造函数而言,包含非平凡的代码通常是一个坏主意。通常,构造函数最多应将提供的值分配给字段。如果对象需要复杂的初始化,则该初始化应由另一个类(通常是factory)负责。请参阅MiškoHevery关于该主题的出色文章:缺陷:构造函数完成了实际工作。
我刚刚安装了Microsoft代码合同。这是的一部分。NET框架和Visual Studio加载项。它提供运行时检查和定义的合同的静态检查。 该工具有四个警告级别,因此我设置了最高级别。 我已经声明了违反Liskov替换原则的类。 LSP规定: 如果S是T的子类型,则T类型的对象可以替换为S类型的对象,而不改变该程序的任何期望属性 在我的例子中,违规行为是这样的:人=新孩子(23);。我们应该能够
我很难确定这到底是什么。此时,我已经熟悉了方法、构造函数和类声明的样子。这是哪个?为什么它看起来像一个构造函数和一个方法有一个婴儿?
问题内容: 假设我有一个实现Runnable接口的抽象基类。 这是一些派生类之一。 关键是我希望我的基类做一些常规的事情,而不是每次都复制它。实际上,它运行良好,输出始终相同: 基本构造函数使用参数1创建的派生线程使用参数1运行派生 但是在JAVA中启动在构造函数中调用抽象方法的线程是否安全?因为据我所知,在大多数情况下,在C ++和C#中是不安全的。谢谢! 问题答案: 此代码演示了为什么你应该
本文向大家介绍python构造函数init实例方法解析,包括了python构造函数init实例方法解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了python构造函数init实例方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、创建对象,我们需要定义构造函数__init__()方法。构造方法用于执行"实例对象的初始化工作
我认为这段代码是错误的,因为jvm可以选择在完成构造函数之前运行。 那么,当构造函数完成时,如何确保另一个线程始终执行?
问题内容: Liskov替换原理是SOLID的原理之一。我已经读过几次这个原理,并试图理解它。 这就是我的所作所为, 此原则与类层次结构之间的强行为契约有关。子类型应该能够被超类型替换而不会违反合同。 我也读过其他文章,对这个问题我有些失落。难道方法不违反LSP? 上面链接的文章摘录: 换句话说,当通过对象的基类接口使用对象时,用户仅知道基类的前提条件和后置条件。因此, 派生对象不能期望此类用户遵