Blu*_*ell 8 java eclipse android annotations suppress-warnings
我创建了一个Annotation
/**
* Highlights this method is declared in XML
*/
public @interface FromXML {
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这个看起来像这样的方法:
@FromXML
public void onSomethingClick(View v){
}
Run Code Online (Sandbox Code Playgroud)
vAndroid反射系统需要该变量来调用此方法.但是输入var v是未使用的,所以我的IDE警告我这一点.我喜欢这个警告,并希望将其用于我的其余代码.

隐藏我可以做的警告
@SuppressWarnings("unused")
@FromXML
public void onSomethingClick(View v){
}
Run Code Online (Sandbox Code Playgroud)
或者我可以添加一个param标签
但我宁愿IDE(eclipse)读取我的 @FromXML注释并且不会给我警告.
我知道你不能扩展注释,但这基本上就是我想做的事情.
有没有办法可以添加我的注释,以识别为" 抑制警告 "注释.
要么
有没有办法将我的注释编码为"像'压制警告一样?
Nar*_*hai 11
您始终可以为Eclipse创建一个插件,该插件将扫描源并在您的案例中查找这些注释,@FromXML并在您的案例中添加额外的注释@SuppressWarnings.
您可以为它创建一个Command,当该命令被触发时,您将运行此插件.
希望这可以帮助.
更新 - 这是一个不能使用这个(测试它)的流感:
或使用AspectJ删除警告 使用AspectJ在Eclipse中添加警告
如果开发人员在代码中使用,本教程使用AspectJ向eclipse添加警告System.out.println().因此,可以执行相反的操作以在存在注释时删除警告.
更新2: Eclipse中有一种方法可以创建自定义注释处理器或编辑Bundeled注释处理器(生成未使用的变量警告).因此必须以自定义方式调整该处理器.
一些很棒的链接:
我想你可以创建一个定义这个方法的接口.这样,您的类将覆盖该方法,不应该有任何警告.
FromXML.java:
public @interface FromXML {
}
Run Code Online (Sandbox Code Playgroud)
MyInterface.java:
public interface MyInterface {
@FromXML
public void onSomethingClick(View v);
}
Run Code Online (Sandbox Code Playgroud)
MyClass.java
public MyClass implements MyInterface {
@Override
@FromXML
public void onSomethingClick(View v){
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:另一种解决方案可能是将您的方法定义为抽象.实际上,正如我理解您的代码,您的方法只是声明(实现在XML文件中).因此,您的问题更多的是设计问题,而不是IDE问题(您的IDE恰好是警告).现实情况是,您的方法是抽象的,并在其他地方定义.
因此,将您的方法定义为抽象将解决问题,但您必须使类抽象:
public abstract class MyClassUsingOnSomethingClick {
/*
* All the class implementation can be here as the normal class.
*/
@FromXML
public abstract void onSomethingClick(View v);
}
Run Code Online (Sandbox Code Playgroud)
我知道你会说这个解决方案使得无法轻松创建对象,但是你将有两个解决方案:
1 - 内联创建对象:
MyClassUsingOnSomethingClick a = new MyClassUsingOnSomethingClick() {
@Override
@FromXML
public void onSomethingClick(View v) {}
};
Run Code Online (Sandbox Code Playgroud)
2 - 在摘要中创建工厂方法MyClassUsingOnSomethingClick:
public static final MyClassUsingOnSomethingClick createEmptyMyClassUsingOnSomethingClick() {
return new MyClassUsingOnSomethingClick() {
@Override
@FromXML
public void onSomethingClick(View v) {}
};
}
// and then, create with: :
MyClassUsingOnSomethingClick a = MyClassUsingOnSomethingClick.createEmptyMyClassUsingOnSomethingClick();
Run Code Online (Sandbox Code Playgroud)
即使我明白你更喜欢更快的解决方案,我相信这个解决方案是最干净的,因为:
好吧,我无法以任何简单的方式或形式做到这一点。
查看注释包http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/annotation/package-summary.html
我无法扩展注释: 为什么无法在 Java 中扩展注释?
我无法实现另一个注释java.lang.Override
我无法模仿/嘲笑/假装@Override
如果我添加@Override到我的中,@FromXML它就不会沿链继承。
唯一的方法是创建一个 Eclipse 插件来识别我的注释并停止警告。很遗憾,因为我找不到简单的方法来做到这一点。
我还沿着为@FromXML入口点创建接口的路线,这非常好,并且传达了我Activity的类型,因此我不再需要注释,也许这种设计更改就是答案。
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |