List.indexOf()的lombok EqualsAndHashCode

时间:2014-12-08 23:10:14

标签: java collections lombok

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

1 个答案:

答案 0 :(得分:1)

正如路易斯已经写过的那样,无论你怎么做,你的MyClass都不会等同于一个字符串。它不会成为避免循环的捷径。

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

正确的等号必须是对称的,并且Lombok才能正常工作,因此MyClass永远不会equals到任何String。你可以自己制作equals,但这是一个非常愚蠢的想法。

  

我猜java集合并不能识别lombak注释?

这不是它的工作原理。 Lombok修改了AST,就好像你编写了包含样板文件的代码一样。您甚至可以使用Delombok查看它。 Guava只看到编译生成的代码,因此无需识别。

  

我可以通过添加构造函数MyClass(String id){this.id = id;然后调用classes.indexOf(new MyClass(&#34; 123&#34;)):)。这可能效率不高但有效

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