首页 >Java >IntelliJ Java 映射流的通用类型推断

IntelliJ Java 映射流的通用类型推断

WBOY
WBOY转载
2024-02-22 12:40:27924浏览

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中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除