编程语言
首页 > 编程语言> > Java泛型与泛型类型参数

Java泛型与泛型类型参数

作者:互联网

我在一课中有以下方法:

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);
        }
    }
}

标签:generics,overloading,java
来源: https://codeday.me/bug/20191025/1931128.html