繁体   English   中英

代码可以在eclipse中运行,但不能在javac中运行

[英]a code can run in eclipse, but not javac

用于代码

import java.util.*;

interface Sample{

}

public class TypeTest implements Sample{
    public static void main(String[] args) {
        Set<Object> objs = new HashSet<>();
        objs.add(new TypeTest());
        List<? extends Sample> objList = (List<? extends Sample>) new ArrayList<>(objs);
        for (Sample t : objList) {
            System.out.println(t.toString());
        }
    }
}

它可以在eclipse中运行并输出TypeTest@7852e922但是javac会收到错误消息:

incompatible types: ArrayList<Object> cannot be converted to List<? extends Sample>

此代码不应编译。 问题在于, new ArrayList<>(objs)的推断类型为ArrayList<Object>因为您已向构造函数传递了Set<Object>作为参数。 但是ArrayList<Object>不是List<? extends Sample>的子类型List<? extends Sample> List<? extends Sample>

更改

    Set<Object> objs = new HashSet<>();

    Set<? extends Sample> objs = new HashSet<>();

如果TypeTest是Sample的子类型,则代码应该编译...。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM