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;
}

私がしたいのは、単一のクラスのみが指定されているラッパーを作成することです。これは、その1つのクラスのみのリストで上記のメソッドを呼び出します。

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)

正直なところ、その理由を説明することはできません。許容される汎用コレクションの範囲を広げる (「? extends」を追加することにより) と、コンパイラがこれが有効であることを簡単に確認できるようになります...

さておき

  • 代わりにArrays.asList(type)私は書くだろうCollections.singletonList(type).
  • クラス メンバーの前に「_」を付けるのは、Java では一般的ではありません
  • Interface「インターフェース」もJavaの概念であるため、素晴らしい名前ではないと思います(そして、そのようInterfaceなインターフェースではないようです:))
  • おそらく、「_type」フィールドを直接参照する代わりに、Interface で「getType()」関数を使用するでしょう。これにより、後でリファクタリングが容易になります。
  • 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 に答える