Découvrez les nouvelles fonctionnalités de Java 7 à Java 9 à la fois

introduction

Je fais du développement front-end avec TypeScript depuis deux ans. J'avais l'habitude de faire du développement côté serveur en utilisant Java, mais la dernière version que j'ai utilisée était Java 7. Java 9 est sorti en septembre 2017, et il semble qu'il soit complètement laissé pour compte, donc de Java 7 à Java 9 Je vais essayer de rattraper les points modifiés à la fois.

Nouvelles fonctionnalités majeures de Java 8

Java 8 est sorti en mars 2014. Java 8 ajoute des fonctionnalités d'écriture de code plus concises telles que les expressions lambda et l'API Stream. La nouveauté de Java 8 est que le code est plus intelligent et Java est un peu plus sophistiqué.

Style Lambda

Java est enfin capable d'utiliser des expressions lambda.

java7


		//Utiliser une classe anonyme
		Arrays.sort(array, new Comparator<Student>() {
			@Override
			public int compare(Student s1, Student s2) {
				return s1.getAge() - s2.getAge();
			}
		});

Dans Java8, vous pouvez écrire à l'aide de l'opérateur de flèche comme suit. Il existe de nombreuses façons d'écrire une expression lambda, mais je vais l'omettre ici.

java8


		//L'expression Lambda peut être utilisée
		Arrays.sort(array, (s1, s2) -> s1.getAge() - s2.getAge());

Vous pouvez également définir une méthode qui permet à l'utilisateur d'utiliser une expression lambda en écrivant une méthode qui prend une interface de fonction comme argument.

Stream API Une API pratique pour gérer les tableaux, etc. a été ajoutée. Les traitements utilisés pour etc. jusqu'à Java 7 peuvent maintenant être décrits de manière concise dans la chaîne de méthodes.

java7


String[] list = new String[] {
				"ABC", "CDE", "EFG"
		};

		//Utilisez Java7 pour l'instruction
		String target = "";
		for (String str : list) {
			if (str.contains("C")) {
				target += str;
			}
		}

java8


		Optional<String> result = Arrays.stream(list).filter(s -> s.contains("C")).reduce((v1, v2) -> v1 + v2);

Optional Une API est facultative pour bien gérer les valeurs nulles. Vous pourrez encapsuler null et écrire ce qu'il faut faire s'il peut être nul.

Par exemple, jusqu'à Java 7, le code dont la valeur null a été vérifiée comme suit

java7


		String str1 = "hoge";
		if (str1 != null) {
			System.out.println(str1);
		}

Si vous utilisez Facultatif, vous pouvez écrire proprement comme suit.

java8


		Optional<String> str2 = Optional.ofNullable("hoge");
		str2.ifPresent(x -> System.out.println(x));

En outre, le code suivant

java7


		String str1 = "hoge";
		if (str1 != null) {
			System.out.println(str1);
		} else {
			System.out.println("nul");
		}

Vous pouvez l'écrire proprement comme suit.

java8


		String str2 = Optional.ofNullable("hoge").orElse("nul");
		System.out.println(str2);

Date and Time API Dans java8, un nouveau package java.time a été ajouté, et diverses classes de gestion de la date et de l'heure basées sur ISO8601 ont été ajoutées. Les API minimales à retenir sont:

Nouvelle API Aperçu
LocalDateTime Date et heure sans fuseau horaire
ZonedDateTime Date et heure avec fuseau horaire
DateTimeFormatter Formateur. Équivalent à SimpleDateFormat

interface Vous pouvez maintenant avoir une implémentation par défaut pour l'interface. Vous pouvez écrire des méthodes et des méthodes statiques comme suit. La méthode par défaut peut être remplacée dans la classe d'implémentation.

java8


public interface IDefaultSample {

	default void Print(String value) {
		System.out.println(value);
	}

	public static void Hello() {
		System.out.println("hello");
	}
}

Annotation de type

Jusqu'à java7, c'était une annotation qui ne pouvait être utilisée que pour déclarer des classes et des méthodes, mais à partir de java8 Il peut désormais également être utilisé pour les types (de variables et de génériques).

Nouvelles fonctionnalités majeures de Java 9

Viennent ensuite les changements de java8 à java9. Le plus gros ajout est peut-être la modularisation. De plus, il semble y avoir de nombreuses améliorations fonctionnelles.

"Project Jigsaw" modulaire

Il est maintenant possible de définir des dépendances, des paramètres publics, des paramètres de version, etc. dans des unités appelées modules en regroupant plusieurs classes.

Il semble que vous puissiez facilement définir un module en écrivant un fichier appelé "module-info.java". J'ai fait référence au programme dans ici.

Dans module-info.java, déclarez le module et le package à publier comme suit. Ici, il est configuré pour publier le package org.astro en déclarant le module org.astro.

** Description de la déclaration ** --module: Déclaration du module --exports: spécifiez les packages à publier

java:src/org.astro/module-info.java


module org.astro {
    exports org.astro;
}

java:src/org.astro/org/astro/World.java


package org.astro;
  public class World {
    public static String name() {
        return "world";
    }
}

Voici comment spécifier les modules dépendants. Parce que le module com.greetings utilise le module org.astro dans sa classe interne Cette déclaration est obligatoire.

** Description de la déclaration ** --Requires: Spécifiez le module dépendant

java:src/com.greetings/module-info.java


module com.greetings {
    requires org.astro;
}

java:src/com.greetings/com/greetings/Main.java


package com.greetings;
import org.astro.World;
public class Main {
    public static void main(String[] args) {
        System.out.format("Greetings %s!%n", World.name());
    }
}

Les détails peuvent être trouvés à ici.

JShell Le jshell, qui est une REPL de java, est installé. REPL consiste à lire ** R ** (Lire), évaluer ** E ** (Eval) et répéter ** P ** (Imprimer) la sortie ** L ** (Boucle). Certains sont inclus dans d'autres langues.

Pour l'utiliser, transmettez le chemin d'accès au JDK ou accédez au JDK et exécutez la commande jshell.

Vous pouvez maintenant exécuter immédiatement la syntaxe Java comme suit: Je ne peux pas penser à beaucoup d'utilisations, mais cela pourrait être un bon endroit pour essayer un peu de code.

SnapCrab_コマンド プロンプト - jshell_2017-12-17_15-14-15_No-00.png

méthode privée sur l'interface

Des méthodes privées peuvent maintenant être ajoutées aux fonctions ajoutées dans java8 qui permettent de décrire les méthodes par défaut et les méthodes statiques dans l'interface.

Fonction API Stream ajoutée

Les méthodes takeWhile et dropWhile ont été ajoutées à l'API Stream ajoutée dans java8.

Reactive Streams Un Framework qui adopte le modèle Publish / Subscribe a été ajouté pour réaliser des flux asynchrones. Il est expliqué en détail dans cet article d'ITpro.

à la fin

Il contient beaucoup d'autres changements, mais cette fois, nous nous sommes précipités pour voir les changements majeurs.

Recommended Posts

Découvrez les nouvelles fonctionnalités de Java 7 à Java 9 à la fois
Nouvelles fonctionnalités de Java7 à Java8
java1.8 nouvelles fonctionnalités
Changements de Java 8 à Java 11
Somme de Java_1 à 100
De Java à Ruby !!
6 fonctionnalités que j'ai manquées après mon retour de Scala à Java
Présentation de New Relic aux applications Java exécutées sur Heroku
Migration de Cobol vers JAVA
Connectez-vous de Java à PostgreSQL
Nouvelles fonctionnalités de Java 14 pouvant être utilisées pour écrire du code
De Java inefficace à Java efficace
Java Convertit des codes de caractères disparates en un même code de caractère à la fois
Remarques sur la création de l'environnement de développement de Kotlin et la migration de Java vers Kotlin
[Java] De la création d'un nouveau projet à la réalisation automatique de test / construction / déploiement
Nouvelles fonctionnalités de Java 9 et exemple de code
Java sera impliqué dès aujourd'hui
De Java à VB.NET - Écriture de notes de contraste
Java, interface pour partir du débutant
Remarques sur la migration de CircleCI 1.0 vers 2.0
La route de JavaScript à Java
[Java] Conversion d'un tableau à une liste
Passer de SQLite3 à PostgreSQL dans un nouveau projet Ruby on Rails
[Java] Flux de l'introduction de STS à la confirmation de la page dynamique sur l'hôte local (2/3)
[Java] Comment récupérer les paramètres passés du html côté serveur
[Java] Flux de l'introduction de STS à la confirmation de la page dynamique sur l'hôte local (1/3)
Comment vérifier Java installé sur Mac
Kick ShellScript sur le serveur depuis Java
Convertir l'heure UTC Java en heure JST
Comment changer de version de Java sur Mac
Connectez-vous de Java à MySQL à l'aide d'Eclipse
De l'installation d'Eclipse à l'exécution de Java (PHP)
Publier sur Slack à partir de Play Framework 2.8 (Java)
Java: Comment envoyer des valeurs du servlet au servlet
[Java] Flux du code source à l'exécution
Introduction à la surveillance à partir de Java Touching Prometheus
Précautions lors de la migration de VB6.0 vers JAVA
Mémo pour la migration de Java vers Kotlin
Conversion de type du type java Big Decimal au type String
Étapes pour enregistrer un fichier Java sur GitHub
Commande Git sur laquelle les nouveaux ingénieurs devraient se pencher [Mis à jour de temps en temps]