确保不同的构造函数在Java中具有相同的行为

时间:2012-03-07 16:38:55

标签: java constructor

上周我正在接受采访,编程测试中的一个问题是:"如何确保类中的不同构造函数在Java中具有相同的行为?"。我不是,仍然不确定"有相同的行为"手段。我给出的答案是:

    

    (new MyObject(...)).equals(new MyObject(...));
    (new MyObject(...)).hashCode == (new MyObject(...)).hashCode();

这里,在每一行中,第一个MyObject(...)引用一个构造函数,第二个引用另一个构造函数。

您认为这些问题实际上是在考虑什么?

4 个答案:

答案 0 :(得分:4)

我不认为你的答案是正确的。您只是证明两个对象是相等的(顺便说一下,如果对象相等,它们必须具有相同的hashCode(),第二个比较是多余的。)

我认为正确的解决方案是拥有一个构造函数,并通过调用this(...)将所有其他构造函数委托给它。如果所有非主要构造函数尽可能短,那么它们都可能以相同的方式运行,因为它们都委托给相同的代码。

当然:单元测试也可能是正确答案。

答案 1 :(得分:1)

我认为这与使用this()super()

有关

答案 2 :(得分:0)

这取决于你如何定义equals和hashcode

例如

(最差的一个!)考虑equals()

的以下实现
return true;

hashcode()

return 1;

现在它并不重要对象的状态!

答案 3 :(得分:0)

如果你引用的类没有覆盖给定的方法,那么仍然等于false,因为它们是两个不同的对象(它们的内存分配细节不同)。哈希码也不起作用。

我认为您可以编写一段使用反射遍历类的代码,并检查每个字段是否具有相同的值。最后,这两个实例仅因字段而不同(因为它们是在编译时设置的,所以不是方法)。

Goodluck接下来的采访。