[Java] Hinweise zur Typinferenz in Java 10

6qwm567z1m.jpg

[Swift](https://ja.wikipedia.org/wiki/Swift_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3 % 83% B3% E3% 82% B0% E8% A8% 80% E8% AA% 9E)), Scala, [Kotlin](https :: //ja.wikipedia.org/wiki/Kotlin), [Go](https://ja.wikipedia.org/wiki/Go_(%E3%83%97%E3%83%AD%E3%82%B0 % E3% 83% A9% E3% 83% 9F% E3% 83% B3% E3% 82% B0% E8% A8% 80% E8% AA% 9E )), [Rust](https: // ja. wikipedia.org/wiki/Rust_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0 Diejenigen, die sich mit% E8% A8% 80% E8% AA% 9E)) entwickeln, sind mit der sogenannten "Typinferenz" vertraut. Typinferenz ist eine Sprachfunktion in statisch typisierten Sprachen, und der Compiler ermittelt den Typ automatisch, ohne den Typ explizit zu beschreiben, so wie Kotlins Typinferenz.

var a = 1

Durch einfaches Schreiben schließt der Compiler automatisch aus dem Typ auf der rechten Seite, dass die Variable a auf der linken Seite ein ganzzahliger Typ ist. Selbst in Java war die Tatsache, dass "Typinferenz lokaler Variablen" von Java 10 abgeleitet wurde, ein neues Ereignis in meinem Gedächtnis.

Vor Java 10 war es beispielsweise erforderlich, den Variablentyp wie folgt explizit zu schreiben:

String name = "tamito0201";

In Java 10 können Sie die erforderlichen expliziten Typen in lokalen Variablendeklarationen entfernen, indem Sie das Schlüsselwort var wie folgt hinzufügen:

var name = "tamito0201";

In dem oben genannten Fall haben Sie möglicherweise keinen großen Vorteil, da String nur durch var ersetzt wird. Im Fall von Java müssen Sie jedoch bei Verwendung der Erfassungs-API mühsam redundanten Code schreiben.

HashMap<Integer, String> map = new HashMap<Integer, String>();

In Java 10 oder höher ist dies

var map = new HashMap<Integer, String>();

Es kann beschrieben werden als. Wie elegant es ist!

Obwohl Typinferenz praktisch ist, handelt es sich auch um ein zweischneidiges Schwert, das unerwartete Fehler verursacht. Daher gibt es je nach Projekt einige Projekte, die die Angabe von var durch den Codierungsstandard verbieten und den Typ explizit angeben. Je größer das Projekt ist, desto altmodischer ist die explizite Eingabe, da das Risiko unerwarteter Fehler besteht.

Warum? Angenommen, Sie haben den folgenden Code:

var distance = getDistance();
System.out.println(distance * 100);

Was ist der Rückgabewert der Funktion getDistance? Diejenigen, die ein ausgeprägtes Gefühl haben, haben es vielleicht hier bemerkt. Korrekt. Wenn die Möglichkeit besteht, das Wrapper-Objekt Integer zurückzugeben, kann null zurückgegeben werden. Infolgedessen ist es offensichtlich, dass nullpo bei der nächsten "Entfernung * 100" auftritt, daher müssen Sie null überprüfen.

Integer distance = getDistance();
if (distance != null) {
    System.out.println(distance * 100);
}

In Java 8 oder höher sollten Sie Optional zurückgeben.

Optional<Integer> distance = Optional.ofNullable(getDistance());
distance.ifPresent(d -> System.out.println(d * 100));

Mit anderen Worten, da var vom Projekt oder Team ordnungsgemäß verwendet wird, muss die Codierungsrichtlinie festgelegt werden.

--Verwenden Sie nicht var

Alle sind korrekt, aber in Wirklichkeit wird 1 oder 2 als angemessen angesehen. Unabhängig davon, wie oft Sie den im Codierungsstandard angegebenen Typ angeben, ist es unwahrscheinlich, dass alle Ingenieure den Codierungsstandard in einem Großprojekt einhalten. Bestimmt durch den Codierungsstandard Checkstyle, SpotBugs, [PMD](https: // pmd) Ich denke, es ist besser, es mit .github.io /) usw. zu verknüpfen.

Alles hat seine Vor- und Nachteile.

Stellen Sie sicher, dass Sie entscheiden, was mit diesem Bereich in Ihrem Projekt geschehen soll. Wenn Sie sich nicht entscheiden, ist das Chaos die Quelle des abgeschlossenen Projekts.

Recommended Posts

[Java] Hinweise zur Typinferenz in Java 10
Dinge, die in bedingten Ausdrücken zu beachten sind
[Java Siler] Informationen zur Typinferenz von var
[Einführung in Java] Informationen zur Typkonvertierung (Besetzung, Promotion)
Informationen zu in Java verwendeten Variablen (lokaler Variablentyp)
Punkte, die bei Java beachtet werden müssen, sind gleich
Typbestimmung in Java
java: Wie schreibe ich eine generische Typliste? [Hinweis]
Dinge, auf die Sie bei der zukünftigen Java-Entwicklung achten sollten
Hinweise zu Java GC
Probieren Sie den Funktionstyp in Java aus! ①
Über Java Abstract Class
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
[Einführung in Java] Über Lambda-Ausdrücke
Multithreaded passend zur [Java] Vorlage
[Einführung in Java] Informationen zur Stream-API
Wie man JAVA in 7 Tagen lernt
Vorsichtsmaßnahmen bei der Verwendung von Spring AOP mit Jersery-Ressourcenklassen
Protokollausgabe in Datei in Java
Meine Gewinnnotiz: Einführung von Java in Ubuntu
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
Informationen zur Dateikopierverarbeitung in Java
Versuchen Sie, Yuma in Java zu implementieren
Beachten Sie, dass Neulinge während der Java-Entwicklung lesbaren Code schreiben müssen
Verwendung des Java-Aufzählungstyps
So verketten Sie Zeichenfolgen mit Java
Beispielcode zum Abrufen der wichtigsten JDBC-Typwerte in der Java + H2-Datenbank
Grund, L zu der Zahl hinzuzufügen, die in den langen Java-Typ eingegeben werden soll
Informationen zum Zurückgeben einer Referenz in einem Java Getter
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
In Bezug auf den Vergleich der Zeichenfolgentypäquivalenz in Java
Versuchen Sie, Project Euler in Java zu lösen
[Leicht verständliche Erklärung! ] Konvertierung des Referenztyptyps in Java
Einfach, Slack Bot mit Java zu machen
Java-Referenz zum Verständnis in der Abbildung
Notiz, um mehrere Werte in HashMap zu haben
Versuchen Sie, n-ary Addition in Java zu implementieren
Über das Verfahren, damit Java funktioniert
[Erstellen] Ein Memorandum über das Codieren in Java
So führen Sie eine Basiskonvertierung in Java durch
Verschiedene Dinge wie Bitflags in Java
[Java] Konvertiert Null vom Objekttyp in String-Typ
Ändern Sie die Liste <Optional <T >> in Java in Optional <Liste <T >>
Ausgabedatum in Java im erweiterten ISO 8601-Format
Informationen zu Datensätzen, die zur Vorschau in Java JDK 14 hinzugefügt wurden
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
Verwendung der Java Scanner-Klasse (Hinweis)
[Grundkenntnisse in Java] Informationen zur Typkonvertierung
So erhalten Sie das Datum mit Java
Fortsetzung Sprechen Sie über das Schreiben von Java mit Emacs @ 2018
Fügen Sie Word-Dokumenten in Java Fußnoten hinzu
[Java Bronze] 5 Probleme zu beachten
Beispiel zum Entpacken einer gz-Datei in Java
Typkonvertierung vom Java Big Decimal-Typ zum String-Typ