当前位置: 首页 > 知识库问答 >
问题:

Lombok EqualsAndHashCode是否检查类类型

马银龙
2023-03-14

我读过https://projectlombok.org/features/equalsandHashCode几次,从中得出了不同的结论。

下面是我正在做的一个例子来帮助澄清我的问题:

@Entity
@Table(name = GeneratorTypeA.VIEW)
@Getter
@Setter
@ToString
@EqualsAndHashCode(callSuper = false, onlyExplicitlyIncluded = true)
public class GeneratorTypeA extends AbstractGenerator {
    ...
    @Id
    @EqualsAndHashCode.Include
    @SequenceGenerator(...)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GeneratorA.seq.id")
    @Column(name = "GENERATOR_A_ID", precision = 19, scale = 0)
    private Long id;
    ...
}

GeneratorTypeB看起来与上面的代码段完全相同。现在说我有以下几点:

final Set<GeneratorTypeA> generatorsA = ...;
final Set<GeneratorTypeB> generatorsB = ...;
public boolean equals(final Object other) {
    if (!(other instanceof GeneratorTypeA)) {
        return false;
    }
    final GeneratorTypeA castOther = (GeneratorTypeA) other;
    return new EqualsBuilder().append(getId(), castOther.getId()).isEquals();
}

我用来组合集合的代码在这个设置中工作得很好,但是我要处理的数据很多,所以遇到equals方法中使用的重复的唯一标识符的几率很低,但是它为意外的功能/错误打开了大门。

public static <T> Set<?> combine(final Set<?>... sets) {
    return Stream.of(sets).flatMap(Set::stream).collect(Collectors.toSet());
}

共有1个答案

钱宇
2023-03-14

是的;对象必须是this类的实例。

根据文档:

if (!(o instanceof EqualsAndHashCodeExample)) return false;

顺便说一句,具有讽刺意味的是,您的公司显然非常重视安全,选择等了很多年才采用Java1.8,但它等得太久了,在您采用它之前,1.8已经寿终正寝,支持已经终止,使您暴露在未修补的安全漏洞中。

 类似资料:
  • 问题内容: 我想知道一个类是否为枚举,但是我想我缺少了一些东西: 它给我一个错误,指出Enum.class无效。那么,如何检查类是否为枚举?我很确定有可能确定这一点,但我无法做到。 谢谢 问题答案: 正确的语法为: 但对于枚举,这是一种更方便的方法: 更新:对于带有主体的枚举项(例如,覆盖方法),这实际上将不起作用。在这种情况下,请使用 参考:

  • 问题内容: 我正在尝试为我们的应用程序快速制作一个简单的依赖注入系统,为期2天。我对任何解决方案都比较灵活,但是我想要一些东西,所以我可以说“给我一个符合该协议的实例”,返回的实际类型可以是只要符合所述协议的任何类型。我已经尝试了很多方法,包括泛型,但是设法弄清了它是否真的可以工作,所以现在我只涉及基本知识,例如: 我知道它并不漂亮,但是现在,我对性能/错误代码并不挑剔,只要它能解决解耦问题(最好

  • 问题内容: 我正在使用反射来查看附加到类的属性的注释是否具有特定类型。目前我正在做: 这让我有些不高兴,因为它依赖于完全合格的类名称的字符串。如果将来更改命名空间,则可能会导致细微的错误。 我想要做: 但是是抽象类,无法实例化。有没有一种方法可以针对接口或抽象类进行模拟(或基本上使用)? 问题答案: 你只是在寻找 ?

  • 问题内容: 假设我有任何变量,定义如下: 我想要一个检查变量类型是否像函数一样的函数。即: 如何检查变量是否为上述定义的类型? 问题答案: 当然,下划线的方式效率更高,但是当效率不是问题时,最好的检查方法是写在@Paul Rosania链接的下划线页面上。 受下划线启发,最终的isFunction函数如下:

  • 问题内容: 我想知道如何检查变量是否是类(不是实例!)。 我试图使用该函数来执行此操作,但我不知道类将具有哪种类型。 例如,在以下代码中 我试图用 ??? 代替“ ” ,但我意识到这是python中的关键字。 问题答案: 更好的是:使用该功能。

  • 我在TypeScript中使用一个接口来定义一个函数,该函数仅在扩展基类的一些类上可用。这是我到目前为止的代码的简化版本: 现在,问题是我会添加更多的“行走”动物,这样移动动物的功能就会变得太大而无法控制。我想做的事情是这样的: 但是,“implements”检查不起作用,在使用接口时,我找不到与“instanceof”等效的。在Java中,“instanceof”的使用似乎可以在这里使用,但Ty