gpt4 book ai didi

java - 无法在 Java 中形成带有两个问号的类型的表达式

转载 作者:行者123 更新时间:2023-12-01 21:28:57 26 4
gpt4 key购买 nike

我既无法编译也无法重构以下代码以使其工作:

public class DoubleQuestionMark {

public static class Paired1<P,R> {
}

public static class Paired2<P,R> {
}

public static class Paired3<P,R> {
}

// regard it as third party method, not allowed to change signature
public static <S> void perform(Paired1<Paired2<S,?>, Paired3<S,?>> argument) {
}


public static void main(String[] args) {

Paired2<Integer, ?> p2 = new Paired2<>();
Paired3<Double, ?> p3 = new Paired3<>();

Paired1<Paired2<Integer, ?>, Paired3<Double, ?>> p1 = new Paired1<>();

perform(p1); // cannot be applied to given class

}
}

如何准备一个可以被perform方法接受的对象?

最佳答案

您正在尝试为同一类型参数传递两种不同类型 S .

Paired1<Paired2<S,?>, Paired3<S,?>>两者S必须是同一类型:

所以这会起作用:

Paired1<Paired2<Integer, ?>, Paired3<Integer, ?>> p1 = new Paired1<>();
perform(p1);

但这不会:

Paired1<Paired2<Integer, ?>, Paired3<Double, ?>> p1 = new Paired1<>();
perform(p1);

如果需要传递两种不同的数字类型,Integer 和 Double 都扩展 Number。所以你可以使用:

Paired1<Paired2<Number, ?>, Paired3<Number, ?>> p1 = new Paired1<>();

关于java - 无法在 Java 中形成带有两个问号的类型的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37658938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com