不确定如何在c中编写类似于模板的Java方法

时间:2013-02-15 19:38:11

标签: java

我想实现一个带签名的函数

static boolean checkAnyOutOfBoundary(int[] index,ArrayList<ArrayList<T>> list)

我希望将T替换为其他自创类(DocScore)。我试图用对象替换T.但是当我尝试实例化列表实例时,比如

ArrayList<ArrayList<Object>> DocScoreList = new ArrayList<ArrayList<Object>>();
for (int i = 0; i < index.length; i++)
DocScoreList.add(root.children.get(i).docList);

The type of root.children.get(i).docList is ArrayList<DocScore>

我无法在DocScoreList中添加元素。有谁知道我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

因此,您要向ArrayList<DocScore>添加ArrayList<ArrayList<Object>>,但add方法需要ArrayList<Object>

您能提供ArrayList<DocStore>,其中ArrayList<Object>是必需的吗?不,因为A bag of banana is not a bag of fruit

因此DocScoreList必须是ArrayList可以添加ArrayList<DocStore>的内容。一些例子是:

  • ArrayList<DocStore>实际类型
  • List<DocStore>因为ArrayList<T> List<T>
  • ArrayList<? extends Object> 某些未知类型的列表(直接或间接)扩展Object。由于DocStore符合条件? extends Object,这将有效。
  • List<? extends Object>
  • 等。你明白了。

答案 1 :(得分:0)

因为即使BarFoo的子类,ArrayList也不是ArrayList的超类。

更改

ArrayList<ArrayList<Object>> DocScoreList = new ArrayList<ArrayList<Object>>();

ArrayList<ArrayList<? extends Object>> DocScoreList = new ArrayList<ArrayList<? extends Object>>();

答案 2 :(得分:0)

static <T> boolean checkAnyOutOfBoundary(int[] index,ArrayList<ArrayList<T>> list)

调用它的示例:

boolean b = checkAnyOutOfBoundary( new int[]{0,1}, new ArrayList<ArrayList<String>>());