如何使用泛型动态覆盖超类函数

时间:2012-05-23 20:22:19

标签: java generics

如果您的基类位于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
        }
    };
}

}

所以最终你会传入你想要获得一个新的匿名实例的子类。

1 个答案:

答案 0 :(得分: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
}

}