如何在Java中创建泛型数组列表?

如何在Java中创建泛型数组列表?,java,arrays,list,generics,Java,Arrays,List,Generics,我已经编写了一个接受泛型类型的类,并且正在尝试在其中创建泛型数组的数组列表。我明白,但我也知道。下面的代码有没有办法工作,还是我找错了方向 public class IterableContainer<T extends IterableItem> { private T[] itemArray; // how can i get this following line to work? private List<T[]> items = new

我已经编写了一个接受泛型类型的类,并且正在尝试在其中创建泛型数组的数组列表。我明白,但我也知道。下面的代码有没有办法工作,还是我找错了方向

public class IterableContainer<T extends IterableItem> {
    private T[] itemArray;

    // how can i get this following line to work?
    private List<T[]> items = new ArrayList<T[10]>();

    public IterableContainer() {  

... etc ...
忽略过去-原来这是一个IDE问题。 留有问题和答案的连续性

编辑:

这也不起作用:

private List<T[]> items = new ArrayList<T[]>();
错误如下:

令牌>上出现语法错误,此令牌后应为VariableDeclaratorId


它工作得很好,只是不能使用t[10]声明,因为数组的长度不影响其类型

i、 e


并不是说这是一个好主意,但它应该可以像往常一样对通用数组进行同样的限制。创建要放在列表中的内容会让你头疼。

。。。找错树了…,使用列表。在Java中使用原始数组几乎总是一种代码味道,没有理由不使用正确的集合类。

您没有在这段代码中定义T

如果要创建泛型类,则需要编写:

公共类IterableContainer

代码中的下一个问题是,您试图在构建ArrayList时初始化它的项。这是不可能的。你应该写:

私有列表项=新的ArrayList

在我的机器里工作很好


当你说我在为移动设备开发……你是针对j2me吗?J2MetaTargeting中不支持泛型

根据规范,这在java中是一个有效的声明,正如其他人所评论的那样,可以用javac编译

public class IterableContainer<T extends IterableItem> {
  private T[] itemArray;

  private List<T[]> items = new ArrayList<T[]>();// valid

  ..........  

}

不幸的是,听起来您在Android项目中受到了限制。

您正在考虑通用方法。他的代码在泛型参数方面很好。这是我最初拥有的,但它在Eclipse中给了我一个问题,尽管它没有强调任何错误—“标记上的语法错误>,此标记后面应该是VariableDeclaratorId”。这仅仅是一个Eclipse问题,还是有更多的问题?它在这里运行良好。也许你的错误在别的地方。停止使用Eclipse作为Java语法的某种权威。啊!我是为移动设备开发的,所以在可能的情况下尽量使用基本类型,因为这样会减少资源消耗。这是我真的不应该担心的事吗?你太早了optimizing@Martyn:ArrayList只是一个具有几个字节开销和更好接口的数组。它会稍微慢一点,但也会稍微慢一点,并且会封装所有与通用数组有关的头痛问题。经验教训。奇怪的是,我没有发现这是过早的优化——更加谨慎。事后看来,它确实具有所有的优化特征。对代码的工作方式进行了一些更改,但现在有了“private-Map-itemsByType=new-HashMap;”这很有效。谢谢。@Martyn任何时候,只要你出于性能原因而做一些事情,而没有实际分析它是否确实是一个问题,这都是过早优化的迹象。做一些事情,比如将你的列表初始化为它所能容纳的项数,或者更多,是正确的用法,而不是过早的优化,因为这是类行为的预期用法。应该说明的是-我是为android开发的,所以这里没有J2ME问题
private List<T[]> items = new ArrayList<T[]>();
public class IterableContainer<T extends IterableItem> {
  private T[] itemArray;

  private List<T[]> items = new ArrayList<T[]>();// valid

  ..........  

}
#  guarantee(_name_index != 0 && _signature_index != 0) failed: bad constant pool index for fieldDescriptor