java中对象构造中的空限制
假设一个类(比如说类a)的构造函数有一个引发异常的构造函数,如果任何一个参数(比如类a有两个成员变量String fieldOne和String fieldTwo)为空 当我看到在hashCode()实现中也使用空参数时,这是否会导致任何问题: 以下是hashCode()方法:java中对象构造中的空限制,java,hashcode,pojo,Java,Hashcode,Pojo,假设一个类(比如说类a)的构造函数有一个引发异常的构造函数,如果任何一个参数(比如类a有两个成员变量String fieldOne和String fieldTwo)为空 当我看到在hashCode()实现中也使用空参数时,这是否会导致任何问题: 以下是hashCode()方法: 注意:类A是不可变的,类A是最终的,没有成员变量的设置器。另外,成员变量是final,这很好:三元条件中会有少量冗余,仅此而已 建议您保持对null的检查完好无损(因为其他函数可能会将fieldOne和fieldTwo分
注意:类A是不可变的,类A是
最终的
,没有成员变量的设置器。另外,成员变量是final,这很好:三元条件中会有少量冗余,仅此而已
建议您保持对
null
的检查完好无损(因为其他函数可能会将fieldOne
和fieldTwo
分配给其他对象,包括null
),除非您将字段标记为final如果:
1) 你有二传手
2) 有一种可能性是,除您之外的其他人将来可能会添加一个新的构造函数而不进行空检查我不理解这个问题。如果fieldOne
和fieldTwo
从不为空,则不必检查它。如果在构造时引发异常,您的对象是否已构造?如果存在null参数,您将无法调用hashCode方法,因为构造函数将抛出错误。为什么检查对象是否为null会导致任何问题?@TMichelsen OP仅提到构造函数,值仍然可以通过setter变为null。类a是一个不可变的类。字段一和字段二是最终变量
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((fieldOne== null) ? 0 : fieldOne.hashCode());
result = prime * result
+ ((fieldTwo== null) ? 0 : fieldTwo.hashCode());
return result;
}