开发者

How do I create a List of generic arrays in Java?

I've written a class which accepts a generic type, and I'm trying to create an array list of generic arrays within it. I understand that Java can't create generic arrays, but I also know there are workarounds. Is there a way the below code can work, or am I barking up the wrong tree?

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 ...

Ignore past here - turns out it was an IDE issue.

Left in for continuity of questions and answers.

EDIT:

This also doesn't work:

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

with the error:

Syntax error on token ">", VariableDeclaratorId expected after this token


"... barking up the wrong tree..., use a List<List<T>>. Using raw arrays in Java is almost always a code smell, there is no reason not to use the proper collection classes.


It works just fine, you just can't use the T[10] declaration as the length of an array doesn't affect its type.

i.e.

... = new ArrayList<T[]>();

Not saying it's a great idea, but it should be possible with the same restrictions on generic arrays as always. Creating stuff to put in your list will give you a headache.


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

works fine in my machine

When you say "I'm developing for mobile devices" ....are you targeting j2me? There is no support for generics in j2metargetng


This is a valid declaration in java (according to spec) and compiles just fine with javac as others have commented.

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

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

  ..........  

}

I believe the error you are seeing is not emitted from Eclipse, possibly coming from an Android SDK configured in Eclipse. If you create a Java Project in Eclipse, this code should work just fine. If you use this in an Android Project in Eclipse, you are likely to run into this one. I had this error when running this code from an Android project :

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

Sounds like you are restricted in an Android project, unfortunately.


You have not defined T in this code.

If you are creating a generic class, you need to write:

public class <T extends IterableItem> IterableContainer...

The next problem in your code is that you are trying to initilize items of ArrayList during its construction. It is impossible. You should rather write:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜