列表<列表<字符串>&GT;到ArrayList <list <string>&gt;

时间:2015-10-25 21:07:11

标签: java generics arraylist

我很困惑......我知道我可以在ArrayList ListList上存储List SemanticTuple< List<String>, List<List<String>> > object; 个;

我有一个这样的对象:

List<List<String>> list = new ArrayList<>();
object = new SemanticTuple<>("name", Arrays.asList(header.split(headerSplitter)), list);

我可以这样做:

object = new SemanticTuple<>("name", Arrays.asList(header.split(headerSplitter)), new ArrayList<>());

但我不能这样做:

public class SemanticTuple <HASH, DATA> implements Serializable {

private String name;
private HASH hash;
private DATA Data;

public SemanticTuple() {
}

public SemanticTuple(String name, HASH hash, DATA Data) {
    this.name = name;
    this.hash = hash;
    this.Data = Data;
}
...

为什么它无法识别那里的类型?

更新

public class MeteorologicTask extends Task < LineNumberReader, 
                                         SemanticTuple< List<String>, List<List<String>> >,
                                         SemanticTuple< List<String>, List<List<String>> > >{
...

对象从另一个类声明为泛型:

public abstract class Task <RESOURCE, INPUT, OUTPUT> implements Callable<OUTPUT>{

protected RESOURCE resource;
protected INPUT input;
protected OUTPUT output;
protected Integer taskID;

public Task() {
}

public Task(RESOURCE resource, Integer taskID) {
    this.resource = resource;
    this.taskID = taskID;
}
...

...从

-keepclassmembers class ** {
  ** base;
}

图片:

enter image description here

2 个答案:

答案 0 :(得分:3)

您正在尝试创建新的ArrayList而不指定元素类型。您是否尝试过明确指定它?

SemanticTuple<List<String>, List<List<String>>> object = 
    new SemanticTuple<List<String>, List<List<String>>>(
        "name", 
        Arrays.asList(header.split(headerSplitter)), 
        new ArrayList<List<String>>()
    );

编辑:在{7}的构造函数调用中明确声明泛型类型似乎在Java 7中有效。

答案 1 :(得分:0)

在第一种情况下,推断所包含元素的类型详细说明了赋值的左侧,即List<String>。因此,当您将list作为参数传递时,将明确指定其静态类型。 在第二条指令中,编译器很可能断言它无法推断包含的类型,这必须在编译时决定。