相关疑难解决方法(0)

无法使用泛型转换为非特定嵌套类型

我有两个嵌套泛型的类.有没有办法摆脱

类型不匹配:无法转换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)

java generics casting

10
推荐指数
1
解决办法
3376
查看次数

GenericWildcard不适用

我有一个功能

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)

你能解释一下,为什么编译器会在第一种情况下抱怨而不是在第二种情况下抱怨?

java generics

9
推荐指数
1
解决办法
113
查看次数

嵌套有界通配符

当我尝试编译以下代码时:

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>());

java generics bounded-wildcard

9
推荐指数
1
解决办法
188
查看次数

标签 统计

generics ×3

java ×3

bounded-wildcard ×1

casting ×1