Heim > Java > Hauptteil

Generische Typinferenz für IntelliJ-Java-Mapping-Streams

WBOY
Freigeben: 2024-02-22 12:40:27
nach vorne
903 Leute haben es durchsucht

Eine Java-Fragen-und-Antwort-Kolumne des PHP-Editors Xigua. In dieser Ausgabe wird die allgemeine Typinferenz von Mapping-Streams in IntelliJ Java erörtert. Während des Entwicklungsprozesses kann die rationelle Verwendung der universellen Typinferenz die Effizienz beim Schreiben von Code verbessern und redundanten Code reduzieren. Durch die Diskussionen und Beispiele in diesem Artikel können Leser den Mapping-Fluss in IntelliJ Java besser verstehen und anwenden und ihre Programmierkenntnisse weiter verbessern.

Frageninhalt

Stellen Sie sich folgende Klasse vor:

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

    }

}
Nach dem Login kopieren

Ich bin neugierig, warum Intellij nach der Zuordnungsphase nicht auf den Typ des Streams schließen kann und einen Fehler anzeigt?

Wenn ich den Typ wie unten gezeigt explizit in der Kartenphase hinzufüge, funktioniert es einwandfrei.

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

    }

}
Nach dem Login kopieren

Warum zeigt Intellij Fehler an, aber beim Kompilieren gibt es keine Fehler? Wenn ich mit der Maus darüber fahre, erscheint dieser Fehler:

Required type: List<Model<?>>

Provided: List<? extends Model<?>>
Nach dem Login kopieren

Workaround

Der Intellij-Compiler hat fälschlicherweise auf den allgemeineren Rückgabetyp der Map-Methode (stream<? extends model<?>>,而它应该是 stream<model<?>>) geschlossen. Der Java-Compiler akzeptiert den Code weiterhin als korrekt, aber wenn die IDE-Warnung störend ist, können Sie sie unterdrücken, indem Sie einfach ein explizites Typargument angeben:

return List.of(10).stream()
        .<Model<?>>map(Test::getModel)
        .toList();
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGenerische Typinferenz für IntelliJ-Java-Mapping-Streams. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage