1

在使用匿名类时,我正在努力使用更智能的编码风格。

在以下情况下,如何使用没有 @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")(为了良好的可写性)

...可能的?还是我只是在做白日梦?

提前非常感谢。

4

0 回答 0