我有一个名为MyClass的类,它使用lombok注释@EqualsAndHashCode(of = { "id" })
。属性id的类型为String。有了这个,我假设当我有这些类的集合,即List<MyClass> classes
,我调用方法.indexOf()
时,字符串值等于集合中某个对象的id我期望它返回该对象的索引,但返回-1。我想java集合并不能识别lombak注释?有什么想法吗?
答案 0 :(得分:1)
正如路易斯已经写过的那样,无论你怎么做,你的MyClass都不会等同于一个字符串。它不会成为避免循环的捷径。
为什么呢? String
对MyClass
一无所知,因此它永远不会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功能。但大多数时候,您的解决方案是最简单和最好的,您可能无法测量任何速度差异。