ISettings为接口,Settings是实现类。
1、Settings可以自动转型为ISettings;
2、List<Settings>不可以自动转型为List<ISettings>,
原因在于泛型类型在 Java 中是 不可协变(invariant)的,即使 Settings
实现了 ISettings
接口,List<Settings>
和 List<ISettings>
之间并没有直接的父子关系。
虽然 Settings
实现了 ISettings
接口,但这并不会自动改变 List
泛型的类型。List<Settings>
和 List<ISettings>
是两个不同的类型,它们之间没有自动的转型关系。
需要手动转化:
List<Settings> settingsList = new ArrayList<>();
List<ISettings> iSettingsList = settingsList.stream().collect(Collectors.toList());
泛型的类型参数是 具体化的,即每个 List
都是明确指定了其类型的。在这种情况下,List<Settings>
和 List<ISettings>
是两个不同的类型,虽然 Settings
实现了 ISettings
,但这并不意味着 List<Settings>
可以被视作 List<ISettings>
。