9

のようなものを実装する方法はありますか

    List<Class<? implements MyInterface>> ClassList = new ArrayList<Class<? implements MyInterface>>(); 

私の目標は、そのリストからハッシュマップを作成することです。ここで、キーはクラスの toString メソッド (MyInterface で定義) であり、値はクラス自体です。このクラスのすべてのオブジェクトの toString メソッドは、同じ結果を返します。このようにして、正しい文字列を検索することで、マップを使用してクラスのインスタンスを作成できました。

助けてくれてありがとう、挨拶

4

2 に答える 2

17
List<Class<? implements MyInterface>> ClassList = new ArrayList<Class<? implements MyInterface>>(); 

する必要があります

List<Class<? extends MyInterface>> ClassList = new ArrayList<Class<? extends MyInterface>>(); 

ジェネリックスの世界にはimplementsキーワードはありません。インターフェイスを実装する型パラメータが必要な場合は、extendsキーワードを使用してそれを表します。

于 2012-12-12T11:15:52.937 に答える
1

私が説明した方法に興味があるように思われるので、これが実行できることを確認するための簡単な実装です...

import java.util.ArrayList;
import java.util.List;

enum NumberClass
{
  ONE("One"),
  TWO("Two"),
  THREE("Three");

  private final String className;

  NumberClass(String name)
  {
    className = name;
  }

  String getName()
  {
    return className;
  }
}

public class Test
{
  public static void main(String[] args)
  {
    List<NumberClass> numbers = new ArrayList<NumberClass>();

    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.THREE);
    numbers.add(NumberClass.TWO);
    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.THREE);
    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.TWO);

    SomeNumber[] nbs = new SomeNumber[numbers.size()];
    int i = 0;
    for (NumberClass nbC : numbers)
    {
      SomeNumber nb;
      try
      {
         nb = (SomeNumber) Class.forName(nbC.getName()).newInstance ();
         nbs[i++] = nb;
      }
      // Cleanly handle them!
      catch (InstantiationException e) { System.out.println(e); }
      catch (IllegalAccessException e) { System.out.println(e); }
      catch (ClassNotFoundException e) { System.out.println(e); }
    }
    for (SomeNumber sn : nbs)
    {
      System.out.println(sn.getClass().getName() + " " + sn.getValue());
    }
  }
}

// The following must be in their own files, of course
public interface SomeNumber
{
  int getValue();
}

public class One implements SomeNumber
{
  public int getValue() { return 1; }
}
public class Two implements SomeNumber
{
  public int getValue() { return 2; }
}
public class Three implements SomeNumber
{
  public int getValue() { return 3; }
}

それでも質問に答えられない場合は、教材と考えてください。:-)

于 2012-12-12T11:48:13.520 に答える