多个嵌套通配符 - 参数不适用 [英] multiple nested wildcard - arguments not applicable

查看:289
本文介绍了多个嵌套通配符 - 参数不适用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经大大简化了我的问题。



我想知道为什么下面的代码不能编译:

  List< AnonType< AnonType<?>>>> l = new ArrayList< AnonType< AnonType<?>>>(); 
l.add(new AnonType< AnonType< String>>());

其中

  public class AnonType< T> {
T a;

List< T> b;
}

编译器错误说add不适用于给定的参数。 OTOH,下面的代码只有一级嵌套通配符完全编译:

  List< AnonType<?> l = new ArrayList< AnonType<?>>(); 
l.add(new AnonType< String>());


解决方案

以下编译符合预期:

 列表< Set< ;? extends Set<?>>> list = new ArrayList< Set< ;? extends Set<?>>>(); 
list.add(new HashSet< Set< String>>());
list.add(new HashSet< Set< Integer>>());

问题是泛型是类型不变的。



考虑一个更简单的例子:



查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆