我有需要的方法Collection<Object>,其中Object可以是一个String或CustomClass.然后它接受集合的每个元素并将其传递给具有如下参数的方法Object:
public void foo(Collection<Object> c) {
for(Object o : c)
bar(o);
}
public void bar(Object o) {
if(o instanceof String || o instanceof CustomClass) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
bar当我通过它正常工作String或CustomClass,但是当我试图通过一个NavigableSet<String>给foo我弄cannot find symbol; symbol : method foo(java.util.NavigableSet<java.lang.String>).
但是,如果我更改参数类型foo以Collection<String>它工作正常,但是这意味着我需要一个新的foo(Collection<CustomClass>),这将涉及到重复代码的方法.有没有解决的办法?
Collection<String>不是子类型Collection<Object>,因此编译器找不到任何兼容的方法.放
public <T> void foo(Collection<T> c) {
for (T o : c) bar(o);
}
Run Code Online (Sandbox Code Playgroud)