我一直在阅读Josh Bloch的"Effective Java 2nd Edition".第43项声明'返回空数组或集合,而不是空值'.我的问题是如何在项目中搜索返回java.util.Collection接口实现的所有方法?使用的IDE是Eclipse,但任何找到正确结果的方法都是可以接受的,例如正则表达式或其他一些IDE.
在Eclipse帮助中找到了这个:
要搜索具有特定返回类型的方法,请使用"*",如下所示:
打开搜索对话框,然后单击Java Search选项卡.
在"搜索"字符串中键入"*"和返回类型(以空格分隔).
选择区分大小写复选框.
选择"方法和声明",然后单击"搜索".
它可以帮助查找返回特定类型的所有方法,但不能查找某些接口的实现.
谢谢你提到SemmleCode.要查找源中返回java.util.Collection子类型的所有方法,请编写:
import default class CollectionType extends RefType { CollectionType() { this.getASupertype*().hasQualifiedName("java.util","Collection") } } from Method m where m.getType() instanceof CollectionType and m.fromSource() select m
也就是说,我们首先定义CollectionType的含义:将java.util.Collection作为超类型的所有类型.getASupertype背后有一颗星,因为我们想要将该操作应用零次或多次.接下来,我们只选择那些返回类型为CollectionType且在源中出现的方法.
继续,尝试一下:-)这是一个简单的练习,进一步细化查询到那些应该返回CollectionType但可能返回null的方法.所有这些都可以交互式完成,在您开发查询时自动完成,并持续检查以帮助您正确完成.您可以通过多种不同方式查看结果,并轻松地在分析结果和代码之间导航.
-Oege [披露:我是Semmle的首席执行官]