我有两个嵌套泛型的类.有没有办法摆脱
类型不匹配:无法转换Msg<Value<String>>为Msg<Value<?>>错误?在最后一次任务中
public class Value<V> {
V val;
public Value(V val) {
this.val = val;
}
@Override
public String toString() {
return "" + val;
}
}
public class Msg<T> {
T holder;
public Msg( T holder) {
this.holder = holder ;
}
public String toString() {
return "" + holder;
}
public static void main(String[] args) {
Msg<Value<String>>strMsg = new Msg(new Value<String>("abc"));
// This is OK
Msg<?>objMsg = strMsg;
// Type mismatch: cannot convert from …Run Code Online (Sandbox Code Playgroud) 我有一个功能
public static void bar (final List<List<?>> list)
{
}
Run Code Online (Sandbox Code Playgroud)
我可以使用通配符调用(<?>)
bar(new ArrayList<List<?>>());
Run Code Online (Sandbox Code Playgroud)
但不是与其他类型(例如String)
// The method bar(List<List<?>>) in the type Foo is not
// applicable for the arguments (ArrayList<List<String>>)
bar(new ArrayList<List<String>>());
Run Code Online (Sandbox Code Playgroud)
然而,这适用于类似的功能
public static void foo(List<?> l)
{
}
public static void main(String[] args)
{
// no error
foo(new ArrayList<String>());
}
Run Code Online (Sandbox Code Playgroud)
你能解释一下,为什么编译器会在第一种情况下抱怨而不是在第二种情况下抱怨?
当我尝试编译以下代码时:
LinkedList<List<? extends Number>> numList = new LinkedList<List<Integer>>();
Run Code Online (Sandbox Code Playgroud)
我得到一个不兼容的类型错误:
Required: LinkedList <java.util.list<? extends java.lang.Number>>
Found: LinkedList <java.util.list<Integer>>
Run Code Online (Sandbox Code Playgroud)
如何实现LinkedList包含具有List扩展元素的元素Number?
为了清楚起见,我希望以numList下列方式添加列表:
numList.add(new LinkedList<Integer>());