1

我打算创建一个具有以下签名的函数 -

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

现在,在这个函数中,我想创建一个 ArrayList,它将包含与 T或其任何子类相同类型的对象,即 T 可以是 Model 对象或其任何子类型。

到目前为止,我试过 -

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

但它没有用。如何让它工作?

4

5 回答 5

2

你可能想要的是这样的:

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

这指定该方法具有T扩展的类型参数Model,因此该方法可以与任何此类类型一起使用,并且该调用将返回List作为第一个参数传递的类型的 a。方法内部:

List <T> list = new ArrayList();
于 2012-05-21T20:50:13.013 回答
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 回答
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 回答
0

这将返回类型 T 的列表(并且 T 是 Model 类型或其子类之一)。

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