方法不适用于参数,但不确定原因

时间:2012-11-16 18:13:04

标签: java methods parameters

我有以下方法,它将类列表作为参数:

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甚至意味着什么。我非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

<强>解决方案

将界面更改为以下内容:

public List<Interface> getInterfacesOfTypes(List<? extends Class<? extends InternalRadio>> types)

说实话,我无法解释原因。扩大允许的泛型集合的范围(通过添加'?extends')只是使编译器更容易看到它是有效的......

<强>除了

  • 而不是Arrays.asList(type)我会写Collections.singletonList(type)
  • 使用'_'为类成员添加前缀在Java
  • 中并不常见
  • 我认为Interface不是一个好名字,因为'interface'也是一个Java概念(似乎Interface不是这样的接口:))
  • 我可能在Interface上使用'getType()'函数而不是直接引用它的'_type'字段 - 这样可以在以后更轻松地进行重构。
  • 您可以接受任何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);
    }