如果您的基类位于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
}
};
}
}
所以最终你会传入你想要获得一个新的匿名实例的子类。
答案 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
}
}