1

次のシグネチャを持つ関数を作成するつもりです -

public static List<? extends Model> getList(Model T, int numberOfItems, StringReader reader)

ここで、この関数内で、Tまたはそのサブクラスのいずれかと同じタイプのオブジェクトを含む ArrayList を作成したいと考えています。つまり、T は Model オブジェクトまたはそのサブタイプのいずれかになります。

これまでのところ、私は試しました -

   List < ? extends T> list = new ArrayList();

しかし、うまくいきませんでした。これを機能させる方法は?

4

5 に答える 5

2

Classインスタンスを型マーカーとして渡す必要があります。このようなもの:

public static <T extends Model> List<T> getList(
    Class<T> c, int numberOfItems, StringReader reader)
{
  final List<T> l = new ArrayList<T>();
  try { for (int i = 0; i < numberOfItems; i++) l.add(c.newInstance());
  } catch (Exception e) { throw new RuntimeException(e); }
  return l;
}

どのように使いたいのかわからないStringReaderので、脇に置いておきました。クラス リテラルを使用してメソッドを呼び出します。を持っているとしましょうSubModel extends Model

final List<SubModel> l = getList(SubModel.class, 10, reader);
于 2012-05-21T21:05:59.890 に答える
2

おそらくあなたが望むのはこれです:

public static <T extends Model> List<T> getList(T model, int numberOfItems, StringReader reader)

Tこれは、メソッドがextendsの型パラメーターを持つことを指定します。そのModelため、メソッドはそのような型で使用でき、その呼び出しに対してはList、最初のパラメーターとして渡された型の を返します。メソッドの内部:

List <T> list = new ArrayList();
于 2012-05-21T20:50:13.013 に答える
0

これにより、タイプTのリストが返されます(TはタイプModelまたはそのサブクラスの1つです)。

public static <T extends Model> List<T> getList(T object, int numberOfItems, StringReader reader) {
    return Arrays.asList(object);
}
于 2012-05-21T20:51:30.563 に答える
0

あなたが求めているの

public static <M extends Model> List<M> getList(M t, int numberOfItems, ...)
于 2012-05-21T20:49:47.443 に答える
0
public static <T extends Model> List<T> getList(final Model t, final int numberOfItems, final StringReader reader)
{
    final List<T> aaa=new ArrayList<T>();
    return null;
}
于 2012-05-21T20:50:06.437 に答える