3

次のようなjarファイルにある基本クラスがある場合:

public class A {

public void awesome(int i){

}

}

...これは、次のようにこれらのクラス (jar でも) によって拡張されます。

public class A1 extends A {

@Override
public void awesome(int i){

}

}

public class A2 extends A {

@Override
public void awesome(int i){

}

}

...一般的な方法で基本関数をオーバーライドすることは可能ですか?

匿名の内部クラスを介して追加されていた実装があるとします。匿名の内部実装全体が一度だけ現れるようにコーディングできますか? したがって、代わりに:

public class Test {

public static void main(String args[]){

    A1 mySpecialA1 = new A1(){
        @Override
        public void awesome(int i){
            //awesome implementation
        }
    };

    A2 mySpecialA2 = new A2(){
        @Override
        public void awesome(int i){
            //awesome implementation
        }
    };
}

}

...あなたが持つことができます(これはそれが壊れるところです):

public class SpecialAFactory {

public static <T extends A> getSpecialA(){
    return new T(){
        @Override
        public void awesome(int i){
            //only once
        }
    };
}

}

したがって、最終的には、新しい匿名インスタンスを取得するサブクラスを渡すことになります。

4

1 に答える 1

2

ジェネリックではできませんが、次のような場合にコードの重複を回避できる、シンプルで理解しやすいソリューションがあります。

public class Test {

public static void main(String args[]){

    A1 mySpecialA1 = new A1(){
        @Override
        public void awesome(int i){
            awesomeImplementation(i);
        }
    };

    A2 mySpecialA2 = new A2(){
        @Override
        public void awesome(int i){
            awesomeImplementation(i);
        }
    };
}

private static void awesomeImplementation(int i) {
    //awesome implementation
}

}
于 2012-05-23T20:27:20.700 に答える