gpt4 book ai didi

java - List.indexOf() 的 lombok EqualsAndHashCode

转载 作者:行者123 更新时间:2023-12-01 12:09:12 26 4
gpt4 key购买 nike

我有一个名为 MyClass 的类,它使用 lombok 注释 @EqualsAndHashCode(of = { "id" }) 。属性 id 是 String 类型。有了这个,我假设当我有这些类的集合,即 List<MyClass> classes我调用该方法 .indexOf()当字符串值等于集合中某个对象的 id 时,我希望它返回该对象的索引,但它返回 -1。我猜java集合不能识别lombak注释?有什么想法吗?

最佳答案

正如 Louis 已经写过的,无论你怎么做,你的 MyClass 都不会等于字符串。没有捷径可以避免循环

为什么? StringMyClass 一无所知,因此它永远不会 等于

正确的等于必须是对称的,并且 Lombok 可以正确地完成它的工作,因此 MyClass 永远不会 equals 到任何 String。您可以自己制作损坏的等于,但这是一个极其愚蠢的想法。

I guess java collections doesn't recognize the lombak annotations?

事情不是这样的。 Lombok 修改 AST,就好像您编写了包含样板文件的代码一样。您甚至可以使用 Delombok 查看它。 Guava 只能看到编译生成的代码,因此没有任何可识别的内容。

I could do it by adding a constructor MyClass(String id){ this.id = id; } and then calling classes.indexOf(new MyClass("123")) :). This may not be efficient but works

是的,事情就是这样。您还可以编写自己的循环或使用 Guava 的谓词或某些 Java 8 功能。但大多数时候,您的解决方案是最简单和最好的,您可能无法测量任何速度差异。

关于java - List.indexOf() 的 lombok EqualsAndHashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27368729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com