Home > Java > body text

Generic type inference for IntelliJ Java mapping streams

WBOY
Release: 2024-02-22 12:40:27
forward
899 people have browsed it

php editor Xigua brings you a java Q&A column. This issue discusses the general type inference of mapping streams in IntelliJ Java. During the development process, rational use of universal type inference can improve code writing efficiency and reduce redundant code. Through the discussions and examples in this article, readers can better understand and apply the mapping flow in IntelliJ Java and further improve their programming skills.

Question content

Imagine the following class:

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 + ")";
        }

    }

}
Copy after login

I'm curious why intellij cannot infer the type of the stream after the mapping phase and displays an error?

When I add the type explicitly in the map stage as shown below, it works fine.

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 + ")";
        }

    }

}
Copy after login

Why does intellij show an error, but there is no error in compilation? When I hover over it, it shows this error:

Required type: List<Model<?>>

Provided: List<? extends Model<?>>
Copy after login

Workaround

intellij The compiler incorrectly inferred the more general return type of the map method (stream<? extends model<?>>, when it should be stream<model<?>>). The java compiler will still accept the code as it is correct, but if the IDE warning is annoying then you can suppress it by simply providing an explicit type argument:

return List.of(10).stream()
        .<Model<?>>map(Test::getModel)
        .toList();
Copy after login

The above is the detailed content of Generic type inference for IntelliJ Java mapping streams. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template