toString()、equals() 和 hashCode() 方法的注释或实现?
Annotation or implementation for toString(), equals() and hashCode() methods?
我在存储库中看到了以下实现,我很困惑:
@Entity
@Getter
@Setter
@ToString(callSuper = true)
@NoArgsConstructor
public class Employee extends BaseEntity {
// properties
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object other) {
return super.equals(other);
}
}
我的问题是:
实现这些方法是否合乎逻辑,因为它们已经在基础 class 中实现了?是不是不需要在这里实现hashCode()
、equals()
方法,在实体class开头加上@ToString(callSuper = true)
?
在实体中添加这些方法,使用注解比每个方法添加3-4行代码更好吗?
我认为这些方法存在误用。因为其中 2 个已实现,其中一个 (toString
) 是通过注释添加的。我认为所有这些都应该以相同的方式使用(全部通过注释或全部通过实现)。我错了吗?
- 是的,您也应该在 child 类 中实现它们。原因是您在
hashCode()
和 equals()
. 上都应考虑它们的其他属性
- 这是个人意见。有些人喜欢完全控制代码,有些人乐于编写更少的代码并依赖 lombok 等依赖项。我会使用注释。如果您需要更复杂的东西,那么您可以随时自己编写方法。
- 如果您有注释,则不应实现该方法或您自己的方法,除非您想避免注释完成他的工作。一般来说,如果您对注释没问题,就应该坚持下去。重要的是要保持一致,这样代码才可读。
您正在使用的注释,如“Getter Setter NoArgsConstructor ToString”属于lombok。
对于您的情况,我认为使用 lombok 的 @Data 注释是更好的方法。
@Data is like having implicit @Getter, @Setter, @ToString,
@EqualsAndHashCode and @RequiredArgsConstructor annotations on the
class.
请注意,如果您的实体具有超类,那么大多数情况下您应该将参数 callSuper=true 设置为@ToString 和@EqualsAndHashCode。
您可以参考 Lombok data 了解更多信息。
我在存储库中看到了以下实现,我很困惑:
@Entity
@Getter
@Setter
@ToString(callSuper = true)
@NoArgsConstructor
public class Employee extends BaseEntity {
// properties
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object other) {
return super.equals(other);
}
}
我的问题是:
实现这些方法是否合乎逻辑,因为它们已经在基础 class 中实现了?是不是不需要在这里实现
hashCode()
、equals()
方法,在实体class开头加上@ToString(callSuper = true)
?在实体中添加这些方法,使用注解比每个方法添加3-4行代码更好吗?
我认为这些方法存在误用。因为其中 2 个已实现,其中一个 (
toString
) 是通过注释添加的。我认为所有这些都应该以相同的方式使用(全部通过注释或全部通过实现)。我错了吗?
- 是的,您也应该在 child 类 中实现它们。原因是您在
hashCode()
和equals()
. 上都应考虑它们的其他属性
- 这是个人意见。有些人喜欢完全控制代码,有些人乐于编写更少的代码并依赖 lombok 等依赖项。我会使用注释。如果您需要更复杂的东西,那么您可以随时自己编写方法。
- 如果您有注释,则不应实现该方法或您自己的方法,除非您想避免注释完成他的工作。一般来说,如果您对注释没问题,就应该坚持下去。重要的是要保持一致,这样代码才可读。
您正在使用的注释,如“Getter Setter NoArgsConstructor ToString”属于lombok。 对于您的情况,我认为使用 lombok 的 @Data 注释是更好的方法。
@Data is like having implicit @Getter, @Setter, @ToString, @EqualsAndHashCode and @RequiredArgsConstructor annotations on the class.
请注意,如果您的实体具有超类,那么大多数情况下您应该将参数 callSuper=true 设置为@ToString 和@EqualsAndHashCode。 您可以参考 Lombok data 了解更多信息。