匿名クラスの使用において、よりスマートなコーディングスタイルに苦労しています。
以下の場合、@ 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つずつ記述しないようにします(書き込み性を高めるため)。
...可能?それとも私はただ空想にふけっていますか?
よろしくお願いします。