如果你有一个基类,是一个jar文件,看起来动态覆盖超类的功能,如:如何使用泛型
public class A {
public void awesome(int i){
}
}
...这是由这些类(也是在一个罐子里)作为扩展如下:
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
}
};
}
}
所以,最后你会被传入子类,你想获得一个新的匿名实例。
不,这是不可能的仿制药。你永远不能用'新T'因为不知道具体的类有问题的编译器无法知道你的意思是它的构造函数 - 或者哪个超你的意思是(编译器必须生成类的类文件,即使是匿名)。而且我想我只给了你很多原因之一,为什么这不可能奏效。 –
@MarkoTopolnik谢谢,这就是我的想法。现在我想知道是否有一些Java功夫使用反射等方式来实现这一点,但我想这是另一个问题。 – hooby3dfx
我认为它可以使用javassist之类的动态代理库。动态库动态地为你提供的任何类的子类,并且你提供了对所有情况执行的单个实现。 –