当前位置: 首页 > 知识库问答 >
问题:

GenericsAdd(捕获)在Set中不能应用于(ConstraintViolation)

谭锐藻
2023-03-14

我有以下代码:

UniqueConstraintViolation violation = new UniqueConstraintViolationImpl();
Set<? extends javax.validation.ConstraintViolation> violations = new HashSet<UniqueConstraintViolation>();
violations.add(violation);
throw new javax.validation.ConstraintViolationException(violations);

其中UniqueConstraintViolation是接口扩展javax.validation.ConstraintViolation和UniqueConstraintViolationImpl是类实现的UniqueConstraintViolation

编译时出现以下错误

java:42:错误:找不到适用于add(UniqueConstraintViolation)冲突的方法。添加(违规);^方法集合。add(CAP#1)不适用(参数不匹配;UniqueConstraintViolation无法转换为CAP#1)方法集。如果CAP#1是新类型变量,则add(CAP#1)不适用(参数不匹配;UniqueConstraintViolation无法转换为CAP#1):CAP#1从捕获扩展ConstraintViolation?扩展ConstraintViolation C:\workspace\zcts travel\crud rest\src\main\java\ru\zcts\crud\AbstractResource。java:43:错误:不兼容的类型:无法将集合转换为集合

                                                                ^   where CAP#1 is a fresh type-variable:
CAP#1 extends ConstraintViolation from capture of ? extends ConstraintViolation

我只是想传入javax.validation.ConstraintViolationException构造函数集合与我自己的javax.validation.ConstraintViolation的实现。

共有2个答案

容柏
2023-03-14
Set<? extends javax.validation.ConstraintViolation> violations = new HashSet<UniqueConstraintViolation>();
violations.add(violation);

您不能将null以外的任何内容添加到voilations,因为它使用?扩展javax.validation.ConstraintViolation

阅读这里:Java数组列表泛型

冯招
2023-03-14

因此,有了您的限制:

interface UniqueConstraintViolation extends ConstraintViolation<YourClass> {

}

public class UniqueConstraintViolationImpl implements UniqueConstraintViolation {
    /* your impl here */
}

这将编译:

UniqueConstraintViolation violation = new UniqueConstraintViolationImpl();

Set<UniqueConstraintViolation> violations = new HashSet<UniqueConstraintViolation>();
violations.add(violation);
throw new ConstraintViolationException(violations);
 类似资料:
  • 问题内容: 我正在与一个应用程序一起工作,该应用程序从XML Schema生成表单(使用JAXFront库),并将用户填写的数据存储到XML文档中。 我在需要时放置了try-catch-finally块,但是在主线程结束时(AWT线程仍在运行)捕获异常时我有一个小问题。 我有两个班级负责主要工作,其他班级对这个问题并不重要: 主类 :具有以下结构。初始化应用程序并运行主机 } 框架类 :生成视图和

  • 我在我的项目分级文件中收到了这样的警告: 警告:(16,5)“生成类型”不能应用于“(groovy.lang.closure )” 我的buildTypes部分是: 我目前使用的是Android Studio 1.1.0、CompilesDKVersion22、BuildToolsVersion22.0.0和TargetSDKVersion22。我试着退让到21岁,但还是收到了警告。 是什么导致了

  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 问题内容: 我的系统是ubuntu 12.04。我从修改了示例,并添加了示例。但是生成时我无法获得输出。 是一个错误吗?源代码的片段如下: 问题答案: 请参阅此答案以及该答案以获取详细说明。仔细阅读signal(7)和signal-safety(7)。也请记住,虚拟地址空间的的过程中是常见的,和之间,所有的共享线程是进程。另请参见proc(5)(并使用pmap(1)),并尝试 从您的进程内部进行读

  • 问题内容: 我对Eli Bendersky提供的示例感到有些惊讶(http://eli.thegreenplace.net/2015/the-scope-of- index-variables-in-pythons-for-loops/ ) 但是,当我想到它时,这是有道理的-Lambda捕获的是对i的引用,而不是i的价值。 因此,解决此问题的方法如下: 看来这样做的原因是,当将i提供给外部lamb