Table of Contents
Question content
Workaround
Home Java Generic type inference for IntelliJ Java mapping streams

Generic type inference for IntelliJ Java mapping streams

Feb 22, 2024 pm 12:40 PM

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!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)