我有以下方法,它将类列表作为参数:
public List<Interface> getInterfacesOfTypes(List<Class<? extends InternalRadio>> types) {
List<Interface> interfaces = new ArrayList<Interface>();
for(Interface iface : _nodes)
if(types.contains(iface._type))
interfaces.add(iface);
return interfaces;
}
我想要做的是为它创建一个包装器,其中只指定了一个类,它只使用一个类的列表调用上面的方法:
public List<Interface> getInterfacesOfType(Class<? extends InternalRadio> type) {
return getInterfacesOfTypes(Arrays.asList(type));
}
然而,我收到一个错误:
The method getInterfacesOfTypes(List<Class<? extends InternalRadio>>) in the type InterfaceConnectivityGraph is not applicable for the arguments (List<Class<capture#3-of ? extends InternalRadio>>)
我无法弄清楚为什么这是capture #3-of
甚至意味着什么。我非常感谢任何帮助!
答案 0 :(得分:1)
<强>解决方案强>
将界面更改为以下内容:
public List<Interface> getInterfacesOfTypes(List<? extends Class<? extends InternalRadio>> types)
说实话,我无法解释原因。扩大允许的泛型集合的范围(通过添加'?extends')只是使编译器更容易看到它是有效的......
<强>除了强>
Arrays.asList(type)
我会写Collections.singletonList(type)
。Interface
不是一个好名字,因为'interface'也是一个Java概念(似乎Interface
不是这样的接口:))Collection
而不是List
答案 1 :(得分:0)
如果您确定对象类型:
public List<Interface> getInterfacesOfType(final Class<? extends InternalRadio> type)
{
final List list = Arrays.asList(type);
@SuppressWarnings("unchecked")
final List<Class<? extends Interface>> adapters = list;
return getInterfacesOfTypes(adapters);
}