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、...をコーディングする場合は、すべてのメソッドに1つずつ注釈を付ける必要があります。

注釈を頻繁に記述しないようにするために、すべての子クラスに注釈効果を伝播するように次のようにコーディングしようとしました。

@Inherited // <- This is what I want this annotation to be!
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SuppressWarningsPropagate extends SuppressWarnings
{
}

次に、クラスYにこの注釈を付けようとしました。これは、1つの基本クラスのみに注釈を付けるのに十分便利で単純です。

...そして私は自分が愚かであることに気づきました。

SuppressWarningsのような注釈は、「拡張」または「実装」することはできません。

代わりに、このコードは機能し、警告はありません。これは、SuppressWarningsがこの1つの具象クラスにのみ適しているためです。

@SuppressWarnings("unused")
public class X
{
    private int i;
    private int j;
}

要約すると、どうすれば...

  • 匿名の内部クラスを使用する(コードを読みやすくするため)
  • また、newでパブリックメソッドを定義します(Android SDKのaddJavascriptInterface()に関しては、パブリックである必要があります)
  • また、すべてのメソッドに対して@SuppressWarnings( "unused")を1つずつ記述しないようにします(書き込み性を高めるため)。

...可能?それとも私はただ空想にふけっていますか?

よろしくお願いします。

4

0 に答える 0