php小编西瓜带来的java问答专栏,本期探讨IntelliJ Java中映射流的通用类型推断。在开发过程中,合理利用通用类型推断能够提高代码编写效率,减少冗余代码。通过本文的讨论和示例,读者可以更好地理解和应用IntelliJ Java中的映射流,进一步提升编程技能。
想象一下下面的类:
public class test { private static list<model<?>> getmodels() { return list.of(10).stream() .map(test::getmodel) .tolist(); } private static model<?> getmodel(int key) { return new model<>(key); } public static void main(string... str) { system.out.println("hello world!" + getmodels()); } public static class model<t> { private t field; model(t key) { field = key; } public string tostring() { return "model(" + field + ")"; } } }
我很好奇为什么 intellij 在映射阶段后无法推断流的类型,并显示错误?
当我如下所示在地图阶段显式添加类型时,它工作正常。
public class test { private static list<model<?>> getmodels() { return list.of(10).stream() .<model<?>>map(test::getmodel) .tolist(); } private static model<?> getmodel(int key) { return new model<>(key); } public static void main(string... str) { system.out.println("hello world!" + getmodels()); } public static class model<t> { private t field; model(t key) { field = key; } public string tostring() { return "model(" + field + ")"; } } }
为什么intellij显示错误,但是编译却没有任何错误?当我将鼠标悬停在它上面时,会显示此错误:
Required type: List<Model<?>> Provided: List<? extends Model<?>>
intellij 编译器错误地推断了 map 方法的更通用的返回类型(streamed7af423ac93edbafbfac8373c81f6ff>
,而它应该是 streamb39763702b7235adb5697e820e631fce>
)。 java 编译器仍然会接受代码,因为它是正确的,但如果 ide 警告很烦人,那么您可以通过简单地提供显式类型参数来抑制它:
return List.of(10).stream() .<Model<?>>map(Test::getModel) .toList();
以上是IntelliJ Java 映射流的通用类型推断的详细内容。更多信息请关注PHP中文网其他相关文章!