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 回答