java - 如何使用泛型动态覆盖父类(super class)函数

标签 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
        }
    };
}

}

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

最佳答案

虽然你不能用泛型来做到这一点,但有一个简单易懂的解决方案可以让你在这种情况下避免代码重复:

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
}

}

关于java - 如何使用泛型动态覆盖父类(super class)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727251/

相关文章:

java - 为 Apache POI 设置路径

java - 单击 Imageview 并在新 Activity 中打开全屏图像

java - 在 Java 中搜索两个 arrayList 索引之间的通用项

java通用字符串到<T>解析器

java扩展泛型类型不明确的方法调用

java - 参数化类和方法 : making a method returns a correct type with java generics

java - 方法断点可能会大大减慢调试速度

java - 如何在通用参数中指定我的数据类型

java - 在网络服务中返回多个值

java - 如何扩展 Node<T extends Comparable<T>> 类