当前位置:  开发笔记 > 编程语言 > 正文

为什么泛型超类型的Java类型推断会在此处中断?

如何解决《为什么泛型超类型的Java类型推断会在此处中断?》经验,为你挑选了0个好方法。

给出以下Java代码:

import java.util.AbstractMap.SimpleEntry;
import java.util.Arrays;
import java.util.List;
import java.util.Map.Entry;
import java.util.Optional;

public class Test {
    public static void main(String[] args) {
        SimpleEntry simpleEntry = new SimpleEntry<>(1, "1");
        Optional> optionalEntry = Optional.of(simpleEntry);
        Optional> optionalSimpleEntry = Optional.of(simpleEntry);

        List> list1 = Arrays.asList(simpleEntry);
        List>> list2 = Arrays.asList(optionalEntry);
        List>> list3 = Arrays.asList(optionalSimpleEntry);
        List>> list4 = Arrays.asList(optionalSimpleEntry);
    }
}

表达式可以初始化listlist2并且list3可以正常工作。但是,表达式初始化list4在Eclipse中因以下错误而中断:

Type mismatch: cannot convert from List>>
to List>>

和此错误javac

Test.java:16: error: incompatible types: inference variable T has incompatible bounds
        List>> list4 = Arrays.asList(optionalSimpleEntry);
                                                                    ^
    equality constraints: Optional>
    lower bounds: Optional>
  where T is a type-variable:
    T extends Object declared in method asList(T...)

AbstractMap.SimpleEntry直接实施Map.Entry。那么,为什么类型推断歇list4时,它适合list1list3(也为分配optionalEntry,对于这个问题)?

特别是我不明白为什么对分配不起作用list1时为什么对分配起作用list4

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有