一个班级是否应负责检查是否已创建可行的对象?如果是这样的话?

时间:2016-01-13 18:37:27

标签: java class constructor

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

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

这是我的第一次体验,我意识到用户可以传递参数,这些参数会创建一个实际上不是三角形的对象,就像两个边加在一起的情况小于第三个。我在构造函数中添加了逻辑,用于检查实际参数是否为三角形。这根本不是正确的做法。

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

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

似乎客户端/用户不应该负责确定Triangle类是否返回了可行的Triangle。不应该假设这个吗?虽然我总是听到假设是所有搞砸的母亲。

我没有将代码包含在内,因为它非常简陋,我相信你们都能得到这个想法。只是不确定这个检查应该发生在哪里。如果它不是三角形,似乎该类不应返回任何内容。我很可能会过度思考这个问题。

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

3 个答案:

答案 0 :(得分:1)

由您决定是否允许或禁止“无效”#34;三角形;例如,如果您正在进行计算,那么禁止它们可能是有意义的。

如果你有这些前提条件,你应该在构造函数中检查它们并抛出异常(IllegalArgumentException或它的自定义子类通常是正确的选择。)

另一方面,如果允许某个"无效"三角形,然后你当然可以检查一个isValid()方法。

答案 1 :(得分:0)

如果我尝试这个,我会先验证用户输入,以确保给定的长度可以形成一个三角形(参见http://www.virtualnerd.com/tutorials/?id=Geo_05_01_0003)。一旦确认值有效,则使用参数调用三角构造函数。

这样您就知道您的Triangle对象将始终是有效的三角形,因为您已经验证了用户输入。

答案 2 :(得分:0)

检查构造函数内部不是最佳方法,因为即使您注意到它不是三角形,也会创建对象。使用构造函数后检查有同样的问题,所以我会在使用构造函数之前检查。这个构造函数非常简单,所以任何这种方式都不会对项目产生任何影响,但是如果你这么做并且需要更多的构造函数,那么创建对象并节省效率时间可能是有利的。

编辑:用户刚刚对这个答案发表了评论,指出构造函数中抛出的异常可以阻止对象被实例化,这使得在构造函数中检查是一个可行的选项。