如果有使用过 DI (Dependency Injection) Framework 像是 butterknife,或是 Bus 一类的 Framework 像是 Otto 或 EventBus,一定会撰写出 Method 是没有被自己开发的源代码直接呼叫的。这时在 Android Studio 的即时编译检查就会出现警告:
Method ‘...’ is never used
就像这篇文章里提到,警告的出现会形成一定程度上的困扰,最好是能够消除掉,毕竟这是一个无法避免的写法,但又不应该被看成是个问题。
照“调整 Android Studio 编译检查规则”中的方法把检查规则整个取消掉,是个一劳永逸的方法。但是也把其可能的错误也抑制掉了,徒增程序质量上的风险,并非上策。
另外一个可行的选项是在方法上宣告 SuppressWarnings
的 Annotation,像是 @SuppressWarnings("unused")
、@SuppressWarnings({"UnusedDeclaration"})
、@SuppressWarnings({"UnusedParameters”})
。跟前一个方案一样,应该显示的警告也同时被遮蔽掉了,不是最佳的方式。
所幸 Android Studio 也不是没有提供对策,在有问题的源代码上按下“alt+enter”,会跳出 Menu 并可以选择 Suppress for methods annotated by ‘...’
项目。以 greenrobot 的 EventBus 为例,所有以 org.greenrobot.eventbus.Subscribe
为 Annotation 的 Method 都不会再显示警告,所以问题顺利地解决了。
以上的解决方法应该已经很多人都知道了,只是还有一个衍生的问题。如果使用的 Framework 提供的 Annotation 不只一个,还是得要一个一个地重覆相同的动作,不能一次搞定吗?
这时可以开启“调整 Android Studio 编译检查规则”中提到的 Inspections 选项画面,切换到“Java->Declaration redundancy->Unused declaration”项目。画面右方的 Options Frame 最下方有一个【Configure annotations...】的按钮,点下去之后会再跳出另一个小视窗。接着就可以在视窗的最下方新增【Add Annotation Class】或【Add Annotations Pattern】,前一个是新增单一个 Class,另一个则是使用万用字元来增加一整组的 Class。
以上说明的这些资讯都被存在 .idea/misc.xml
的文件中,打开后会看到类似以下的内容:
<component name="EntryPointsManager">
<entry_points version="2.0" />
<list size="1">
<item index="0" class="java.lang.String" itemvalue="org.greenrobot.eventbus.Subscribe" />
</list>
</component>
如果你有莫名的控制欲,想要凡事都掌握在手中,可以直接修改文件的内容,也会达到一样的效果。
网友评论