在使用匿名类时,我正在努力使用更智能的编码风格。
在以下情况下,如何使用没有 @SuppressWarnings 的匿名内部类?
像这样使用匿名类时:
someMethod( new Y(){
// non-overriding public method
public void echo1(){
// do some stuff
}
} );
...
public abstract class Y
{
// use me as an anonymous class,
// and define any methods when defining me
}
此代码发出警告。
公共方法 "echo1" 需要注释 @SuppressWarnings("unused") 。
如果我另外编码 echo2, echo3, echo4,... 所有方法都需要一一注释。
为了避免频繁写注解,我尝试用这种方式编写代码,以便在所有子类上传播注解效果:
@Inherited // <- This is what I want this annotation to be!
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SuppressWarningsPropagate extends SuppressWarnings
{
}
然后我尝试用这个注释来注释 Y 类。这将非常有用且简单到只注释一个基类。
...我发现自己很愚蠢。
像 SuppressWarnings 这样的注解不能被“扩展”或“实现”。
相反,此代码可以正常工作并且没有警告,因为 SuppressWarnings 仅适用于这个具体的一个类:
@SuppressWarnings("unused")
public class X
{
private int i;
private int j;
}
总而言之,我怎么能...
- 使用匿名内部类(为了代码的良好可读性)
- 并在 new 上定义公共方法(必须是公共的,就 Android SDK 的 addJavascriptInterface() 而言)
- 并且还要避免为所有方法一一写@SuppressWarnings("unused")(为了良好的可写性)
...可能的?还是我只是在做白日梦?
提前非常感谢。