0

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

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意味着什么。我将不胜感激任何帮助!

4

2 回答 2

1

解决方案

将界面更改为以下内容:

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

老实说,我无法真正解释为什么。扩大允许的泛型集合的范围(通过添加“?扩展”)只是让编译器更容易看到这是有效的......

在旁边

  • 而不是Arrays.asList(type)我会写Collections.singletonList(type).
  • 在 Java 中使用 '_' 前缀类成员并不常见
  • 我认为Interface这不是一个好名字,因为“接口”也是一个 Java 概念(而且似乎Interface不是这样的接口 :))
  • 我可能会在 Interface 上使用 'getType()' 函数,而不是直接引用它的 '_type' 字段 - 这使得以后更容易重构。
  • 您可能可以接受任何Collection而不是要求List
于 2012-11-16T18:31:18.347 回答
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);
    }
于 2012-11-16T18:34:55.873 回答