如何在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