如果您在 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/