为什么Java不会在重载的构造函数情况下识别我的ArrayList

Mik*_*keG 3 java collections constructor

我有两个构造函数设置如下:

public XMessage(Information info, List<Object> results) {
    this.information = info;
    this.results = results;
}

public XMessage(Information info, Object result) {
    this(info, Collections.singletonList(result));
}
Run Code Online (Sandbox Code Playgroud)

我通过传入一个Information对象和一个ArrayList对象来创建XMessage对象.当我检查结果时,它是一个包装ArrayList项的单例列表.为什么Java不使用更合适的构造函数以及强制它的选项是什么?

Tom*_*icz 11

调用第一个构造函数:

new XMessage(information, new ArrayList<Object>());
Run Code Online (Sandbox Code Playgroud)

调用第二个构造函数:

new XMessage(information, new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)

ArrayList<String>()不被视为List<Object>同时ArrayList<Object>是.考虑使用以下构造函数:

public XMessage(Information info, List<? extends Object> results)
Run Code Online (Sandbox Code Playgroud)

正如@LuiggiMendoza建议如下.