gpt4 book ai didi

使用泛型类型参数的 Java 重载

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:58 28 4
gpt4 key购买 nike

我在一个类中有以下方法:

void delete(ClassA a) {
//....
}

void delete(ClassB b) {
//...
}

void delete(List<ClassA> list) {
for (ClassA a: list) {
delete(a);
}
}

void delete(List<ClassB> list) {
for (ClassB b: list){
delete(b);
}
}

对于前两种方法,重载工作正常。但是第三种和第四种方法之间存在冲突。

是否可以用一种方法代替它们?我试过下面的方法,不对:

void delete(List<? extends Object> list){
for (Object o: list){
delete((o.getClass())o);
}
}

如何在运行时检测列表中实例的类类型并调用适当的方法?

最佳答案

重载在编译时解决,因此您不能依赖运行时类型。

您可以做的是使用 instanceof 检查运行时类型并显式转换为相关类型:

void delete(List<? extends Object> list){
for (Object o: list) {
if (o instanceof ClassA) {
delete((ClassA) o);
} else if (o instanceof ClassB) {
delete((ClassB) o);
}
}
}

关于使用泛型类型参数的 Java 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45729119/

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