[Java] Versuchen Sie, mithilfe von Generika zu implementieren

Hier einige Hinweise zu Implementierungen mit Generics.

Nimmt die Klasse \ <T > und gibt ein Objekt mit generischen \ <T > zurück

Wenn Sie etwas deklarieren, das Generika normal angibt, ist es in der Regel redundant. Wenn Sie also ein solches Objekt mehrmals generieren möchten, ist es meiner Meinung nach besser, eine Generierungsfunktion in der Util-Klasse zu erstellen.

Implementierungsbeispiel


//Eine Funktion, die eine der Klasse entsprechende Liste zurückgibt
<T> List<T> generateList(Class<T> clazz) {
    return new ArrayList<>();
}

//Eine Funktion, die einen BeanPropertyRowMapper zurückgibt, der der Klasse entspricht
<T> BeanPropertyRowMapper<T> getBeanPropertyRowMapper(Class<T> clazz) {
    return new BeanPropertyRowMapper<>(clazz);
}

Anwendungsbeispiel


//Es ist überflüssig, so zu schreiben
new BeanPropertyRowMapper<Something>(Something.class);

//Es ist einfacher zu lesen, wenn Sie so schreiben
Util.getBeanPropertyRowMapper(Something.class);

Schreiben Sie so, dass keine Warnung / kein Fehler ausgegeben wird, wenn der Typ keine Rolle spielt

Im Fall von "Verwenden Sie einen Typ, der Generika verwendet, aber der Typ des Inhalts spielt keine Rolle", wird durch einfaches Weglassen des Typs eine Warnung ausgegeben.

Beispiel für eine Warnung


//Doppelte Prüfung mit Hash-Set
boolean checkForDuplicate(List list) {
    return list.size() == new HashSet(list).size();
}

In solchen Fällen können Sie "<?>" Und den Diamantoperator schreiben, um Warnungen zu vermeiden.

Implementierungsbeispiel


//Doppelte Prüfung mit Hash-Set
boolean checkForDuplicate(List<?> list) {
    return list.size() == new HashSet<>(list).size();
}

Sie können es schreiben, indem Sie es mit "" angeben, aber es ist etwas redundant.

Redundantes Implementierungsbeispiel


//Doppelte Prüfung mit Hash-Set
<T> boolean checkForDuplicate(List<T> list) {
    return list.size() == new HashSet<>(list).size();
}

Bei Verwendung von Stream

Selbst wenn die Stream-Verarbeitung mit List als Argument ausgeführt wird, wird die Kompilierung möglicherweise nicht bestanden, es sei denn, <<>> ist geschrieben.

Beispiel, dass die Kompilierung nicht bestanden wird


BeanPropertySqlParameterSource[] makeParamArray(List entities) {
    return entities.stream()
            .map(BeanPropertySqlParameterSource::new)
            .toArray(BeanPropertySqlParameterSource[]::new);
}

Beispiel für das Kompilieren


BeanPropertySqlParameterSource[] makeParamArray(List<?> entities) {
    return entities.stream()
            .map(BeanPropertySqlParameterSource::new)
            .toArray(BeanPropertySqlParameterSource[]::new);
}

Recommended Posts

[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie, Yuma in Java zu implementieren
Versuchen Sie, TCP / IP + NIO mit JAVA zu implementieren
Versuchen Sie es mit RocksDB mit Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
[Java] So implementieren Sie Multithreading
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
Versuchen Sie, Yuma in Ruby zu implementieren
Versuchen Sie, die iOS14-Widget-Funktion zu implementieren
Versuchen Sie, die öffentliche Java-Methode zu extrahieren
[Java] Generika
Versuchen Sie es mit der IBM Java-Methodenverfolgung
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
[Java] Wo haben Sie versucht, Java zu verwenden?
[Java] Versuchen Sie, das Fizz Buzz-Problem mithilfe der rekursiven Verarbeitung zu lösen
Versuchen Sie, Werte von Java Servlet mit JSON an die iPhone-App zu übergeben
Schnittstelle Versuchen Sie, Java-Problem TypeScript 7-3 zu machen
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Versuchen Sie, Project Euler in Java zu lösen
Versuchen Sie es mit der Stream-API in Java
[Java] So berechnen Sie das Alter mit LocalDate
Java lernen Versuchen Sie es mit einem Scanner oder einer Karte
Versuchen Sie es mit der JSON-Format-API in Java
Versuchen Sie, eine Anmeldefunktion mit Spring-Boot zu implementieren
Stellen Sie mit Eclipse eine Verbindung von Java zu MySQL her
So erzwingen Sie Codierungskonventionen in Java
Versuchen Sie es mit der REST-API von JobScheduler - Java RestClient-Implementierung -
[Swift5] So implementieren Sie Animationen mit "lottie-ios"
So implementieren Sie die Image-Veröffentlichung mithilfe von Schienen
Versuchen Sie es mit der Wii-Fernbedienung in Java
Versuchen Sie es mit libGDX
Versuchen Sie es mit Maven
Versuchen Sie es mit powermock-mockito2-2.0.2
Versuchen Sie es mit GraalVM
[Java] Generics-Beispiel
Java Generics (Hinweise)
Probieren Sie Java 8 Stream aus
Versuchen Sie es mit jmockit 1.48
Versuchen Sie es mit SwiftLint
Versuchen Sie es mit Log4j 2.0
[Java] Einführung in Java
Einführung in Java
Versuchen Sie es mit Java 9
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Versuchen Sie es mit der RestClient Test-Klasse der REST-API-Java von JobScheduler.
Versuchen Sie, eine Java 8-Umgebung unter Amazon Linux2 zu erstellen
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Versuchen Sie, Ruby und Java in Dapr zu integrieren
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
Inkrementierungsverhalten Versuchen Sie, Java zum Problem TypeScript 3-4 zu machen
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden