java - 获取 Java 方法分派(dispatch)的通配符对象的类型?

标签 java casting

我有一个通配符对象列表,并且希望将迭代算法与项目处理分开,这取决于列表中包含的对象类型。

确定 items Listitem 类型并分派(dispatch)到适当的 doSomething 的最佳方法是什么?方法?

private void iterateListAlgo (List<?> items) {
  for (int i = 0, len = items.size(); i < len; i++) {
  //... lalala
    doSomething(items.get(i));
  }
}

private void doSomething (ClassA item) {
  //... lalala
}

private void doSomething (ClassB item) {
  //... lalala
}

// etc.

编译这个给我错误:

required: ClassA
  found: CAP#1
  reason: argument mismatch; Object cannot be converted to ClassA
  where CAP#1 is a fresh type-variable:
    CAP#1 extends Object from capture of ?

我更愿意将类型转换保留在 iterateListAlgo 函数之外,但我什至不确定如何做到这一点。

最佳答案

在 java 中执行此操作的方法是让 ClassAClassB 实现一个具有方法 doSomething() 的公共(public)接口(interface)。例如,

interface CanDoSomething {
    public doSomething();
}

class ClassA implements CanDoSomething {..}
class ClassB implements CanDoSomething {..}

private void iterateListAlgo(List<CanDoSomething> items) {
   for (CanDoSomething item : items) {
       item.doSomething();
   }
} 

关于java - 获取 Java 方法分派(dispatch)的通配符对象的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19367495/

相关文章:

java - Spring Boot 无法在/resources/static/images 文件夹中找到图像

javascript - typescript 实例不工作

Java异常监控

java - Jersey : setting multiple object in response

java - 该等待/通知代码性能异常

linq-to-sql - 无法转换类型为 'System.Collections.Generic.List` 1 的对象 [<>f__AnonymousType 6`65[System.String,System.Decimal,System.Nullable` 1

c++ - 这是某种形式的 C++ 类型转换吗?

c - 针对用户定义的函数类型转换错误生成编译器警告

c++ - 奇怪的转换问题 Derived to Base in C++

java - 序列化 Integer 对象的大规模处理