gpt4 book ai didi

java - 当参数接受 Collection> 时无法输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:49 25 4
gpt4 key购买 nike

这个问题来自 javax.validation.ConstraintViolationException 的构造函数的类型.它接受 Set<ConstraintViolation<?>>作为参数。

虽然很容易获得一组 ConstraintViolation ,其中 X 是具体类型,但似乎不可能从任何类型良好的 API 获得一组“ConstraintViolation ”。如果不使用一些复杂的转换,就不可能将前者转换为后者。 (转换为 Set<? extends ConstraintViolation<?>>,然后转换为 Set<ConstraintViolation<?>>。)

那么你们认为 API 错误还是我错了(为什么)?

最佳答案

API 错误。除非实现需要添加新的 ConstraintViolation<?> s 到集合,它应该接受所有 Set<? extends ConstraintViolation<?>> .

这里有一个例子来说明为什么这更灵活(由 Paul Bellora 提供,谢谢):

public class Main {

interface Foo<T> { }

interface SubFoo<T> extends Foo<T> { }

static class Bar { }

public static void main(String[] args) {

Set<Foo<?>> arg1 = null;
Set<SubFoo<?>> arg2 = null;
Set<Foo<Bar>> arg3 = null;
Set<SubFoo<Bar>> arg4 = null;

Set<Foo<?>> inflexibleParam;
inflexibleParam = arg1; //success
inflexibleParam = arg2; //incompatible types
inflexibleParam = arg3; //incompatible types
inflexibleParam = arg4; //incompatible types

Set<? extends Foo<?>> flexibleParam;
flexibleParam = arg1; //success
flexibleParam = arg2; //success
flexibleParam = arg3; //success
flexibleParam = arg4; //success
}
}

( ideone )

关于java - 当参数接受 Collection<X<?>> 时无法输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18259551/

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