NavigableSet <String>与方法参数中的Collection <Object>不匹配

bou*_*ful 0 java overloading

我有需要的方法Collection<Object>,其中Object可以是一个StringCustomClass.然后它接受集合的每个元素并将其传递给具有如下参数的方法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当我通过它正常工作StringCustomClass,但是当我试图通过一个NavigableSet<String>foo我弄cannot find symbol; symbol : method foo(java.util.NavigableSet<java.lang.String>).

但是,如果我更改参数类型fooCollection<String>它工作正常,但是这意味着我需要一个新的foo(Collection<CustomClass>),这将涉及到重复代码的方法.有没有解决的办法?

Mar*_*nik 5

Collection<String>不是子类型Collection<Object>,因此编译器找不到任何兼容的方法.放

public <T> void foo(Collection<T> c) {
  for (T o : c) bar(o);
}
Run Code Online (Sandbox Code Playgroud)