我很困惑......我知道我可以在ArrayList
List
个List
上存储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;
}
图片:
答案 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
作为参数传递时,将明确指定其静态类型。
在第二条指令中,编译器很可能断言它无法推断包含的类型,这必须在编译时决定。