gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:33:40 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com