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.
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 + ")"; } } }
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 + ")"; } } }
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<?>>
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();
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!