我有以下类定义:
public class Triple<T,U,V> {
private T t;
private U u;
private V v;
public Triple(T t, U u, V v){
this.t = t;
this.u = u;
this.v = v;
}
public T t(){
return t;
}
public U u(){
return u;
}
public V v(){
return v;
}
}
以及
public class Tuple <T,U>{
private T t;
private U u;
public Tuple(T t, U u){
this.t = t;
this.u = u;
}
public T t(){
return t;
}
public U u(){
return u;
}
}
最后
public class State {
private String name;
public State(String name){
this.name = name;
}
}
我想创建一个方法,该方法将可变数量的三元组作为参数并返回类型为Tuple<Tuple<State,String>,State>[]
的值-这是一个元组数组,其中每个元组都有一个State的Tuple作为其第一个成员。字符串,并作为其第二个成员是国家。我已编写但不起作用的方法如下:
public static Tuple<Tuple<State,String>,State>[] mkRelationOne(Triple<String,String,String>...tr){
return Arrays.stream(tr).map(
x->new Tuple<Tuple<State,String>,State>(
new Tuple<State,String>(
new State(x.t()), x.u()
),
new State(x.v())
)
).toArray(Tuple<Tuple<State,String>,State>[]::new);
}
错误消息为Cannot create a generic array of type Tuple<Tuple<State,String>,State>
。如果它具有类型,类型为Tuple<Tuple<State,String>,State>
,它如何通用?以及如何解决此问题,使其返回要返回的数组?谢谢!
答案 0 :(得分:3)
您正在尝试在那里创建一个generic
array ,这在Java中是不受支持的。不能使用类型参数声明数组。
那是您不能创建一个通用数组,但是您可以声明一个:
public static Tuple<Tuple<State, String>, State>[] mkRelationOne(Triple<String, String, String>... tr) {
return (Tuple<Tuple<State, String>, State>[]) Arrays.stream(tr).map(
x -> new Tuple<>(
new Tuple<>(
new State(x.t()), x.u()),
new State(x.v())))
.toArray(Tuple[]::new);
}
这将起作用,但会生成警告。