我有一个通配符对象列表,并且希望将迭代算法与项目处理分开,这取决于列表中包含的对象类型。
确定 items
List 中 item
类型并分派(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 中执行此操作的方法是让 ClassA
和 ClassB
实现一个具有方法 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/