java - 类是否应该负责检查是否已创建可行的对象?如果是这样怎么办?

标签 java class constructor

我刚刚开始学习 Java 的 OOP 并遇到了一个问题,这让我开始思考,尽管可能太多了。我寻找答案已经有一段时间了,但找到正确的问题往往是最大的挑战。

我用两个方法 isTriangle() 和 typeOfTriangle() 创建了一个 Triangle 类。我的构造函数有 3 个参数(side1、side2、side3)。

这是我第一次经历,我意识到用户可以传入参数来创建一个实际上不是三角形的对象,就像两条边加在一起小于第三条边的情况一样。我向构造函数添加了逻辑,用于检查实际参数是否构成三角形。这看起来根本不是正确的做法。

问题: Triangle 类是否应该负责确定实际参数是否创建可行的三角形?如果是这样怎么办?该逻辑实际上会与构造函数一起使用吗?

您是否需要先创建对象(非三角形),然后使用 myTriangle.isTriangle(); 确定您创建的对象是否可行; ?

客户端/用户似乎不应该负责确定 Triangle 类是否返回可行的 Triangle。难道不应该这样假设吗?尽管我一直听说假设是所有错误之母。

我没有包含代码,因为它非常初级,我相信你们都明白了。只是不确定应该在“哪里”进行此检查。似乎如果该类不是三角形,则不应返回任何内容。我很可能想得太多了。

感谢您花时间阅读我的帖子。

最佳答案

允许或禁止“无效”三角形是否更有意义取决于您;例如,如果您正在进行计算,那么禁止它们可能确实有意义。

如果您有这些类型的先决条件,则应该在构造函数中检查它们并引发异常(IllegalArgumentException 或其自定义子类通常是正确的选择)。

另一方面,如果允许“无效”三角形在某种程度上是有意义的,那么您当然可以使用 isValid() 方法进行检查。

关于java - 类是否应该负责检查是否已创建可行的对象?如果是这样怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34774488/

相关文章:

java - libgdx 无法将纹理加载到数组

java - Eclipse : Failed to connect to remote VM. 连接被拒绝。

java - 使用字符串值创建变量名

c++ - 如何使用不同的方法实现从抽象派生的类?

c++ - 错误 C2955 : use of class template requires template argument list

c++ - 为什么在这种情况下不调用复制构造函数?

C++ 期望构造函数、析构函数或类型转换在 '(' 标记之前

java - 如何调试运行但不停止的程序?

C# - 将 SomeClass 传递给函数而不是 typeof(SomeClass)

java - 仅从 Maven 测试调用 init 方法失败 ested 异常为 java.lang.UnsupportedOperationException