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

列表中的Java不兼容等式约束

邵捷
2023-03-14

我有一个多级类结构,希望将它们的实现传递给一个可以对它们调用函数的函数,但我得到了一个不兼容的等式约束:Test。SubDTO2和测试。SubDTO错误。

以下是代码:

public class Test {

  abstract class DTO { }

  class SubDTO extends DTO implements Interf{ }

  class SubDTO2 extends DTO implements Interf{ }

  class DAO<T extends DTO> { }

  interface Interf { }

  static DAO<SubDTO> daoImpl1;
  static DAO<SubDTO2> daoImpl2;

  public static void main(String... args) {
    func(Arrays.asList(daoImpl1, daoImpl2)); // <- error is in this line
  }

  static <T extends DTO & Interf> void func(List<DAO<T>> arg) {
  }
}

确切的错误消息:

[ERROR]   required: java.util.List<Test.DAO<T>>
[ERROR]   found:    java.util.List<Test.DAO<? extends Test.DTO>>
[ERROR]   reason: inference variable T has incompatible equality constraints Test.SubDTO2,Test.SubDTO

我需要函数func中的列表来扩展DTO,并实现Interf,因为我对它们调用某些函数。

为什么会这样?如果我更改func的签名,并且只传递一个DAO,它可以正常工作,但我需要它来处理多个。

我的选择是什么?

我尝试了多个java版本(1.8),都是一样的。

共有1个答案

温源
2023-03-14

您可以尝试定义func,如下所示

static <T extends DTO & Interf> void func(List<? extends DAO<? extends DTO>> asList) 
 类似资料:
  • 我试图从一个流列表,但我有一个例外。 这是一个带有对象列表的电影对象。 以下是电影: 我在列表中添加元素: 我有一个编译器错误:

  • 以下一些不兼容的语法功能列表,不完全。 不支持类的定义 函数外作用域不是全局作用域 include/require/eval 执行的代码是引入代码作用域 对变量引用缺乏支持 extract() 函数使用无效 不支持可变变量 不允许使用 $string [n] 的方式获取字符串中的某个字符 双引号字符串中引入变量,但不可引入数组项 不存在的常量不会自动转换为字符串 函数定义中不支持类型约束 标识符不

  • 你好,我想在HashMap中添加一个字段,但我有一个错误 “java:不兼容类型:推理变量T的边界不兼容等式约束:java.util.Map 这是关于我代码的另一条信息 我应该用地图还是别的什么?添加我的新字段状态

  • 问题内容: 我没有用以下任何一种方式编译此代码: 在泛型方面,java似乎没有考虑并使用相同的类型。 这是为什么?还有一些不错的出路吗? 有一个具有以下签名的库函数:。对于作为参数传递的简单类型,此方法很好用,但在泛型的情况下,结果未用通配符参数化,从而导致javac抱怨原始类型。我想将结果传播到我的应用程序的其余部分,但是简单的强制转换无法按我期望的那样工作。 编辑:解决方案 感谢您的回答,这就

  • 问题内容: 在将我们的项目之一迁移到 Java 9(内部版本9 + 181)时 ,我遇到了一个特殊的问题,那就是在某些与类型推断和java- module 相关的库中,这种实现看起来不正确。我正在使用 和 配置,如下所示: 通过以下组合,该配置对我而言运行良好: Java 8 + Maven 3 +编译器插件3.6.1 [我们的原始设置] Java 9 + Maven 3 +编译器插件3.7.0(

  • 问题内容: 两种语言都声称使用Perl样式正则表达式。如果我使用一种语言测试正则表达式的有效性,那么它是否可以在另一种语言中工作?正则表达式语法在哪些方面有所不同? 这里的用例是一个C#(.NET)UI,它与最终的Java后端实现进行对话,该实现将使用正则表达式来匹配数据。 请注意,我只需要担心匹配,而不必担心提取匹配数据的某些部分。 问题答案: 有很多差异。 角色类 人物类减法 .NET 是(2