Java version 8 et fonctionnalités ultérieures

Cet article décrit les fonctionnalités de ** Java ** depuis la version 8 du point de vue d'un développeur et explique comment les développeurs peuvent les utiliser pour améliorer les performances.

De Leijuan, expert technique principal, Alibaba Group

Les langages de programmation tels que Python et JavaScript sont de plus en plus populaires. Cependant, l'ancien langage dominant, Java, malgré sa perte de faveur, reste en tête des différents classements des principaux langages de programmation. Java reste le premier langage de développement d'applications pour les applications d'entreprise grand public. Depuis le lancement de Java 8, Java a introduit de nombreuses nouvelles fonctionnalités et outils de langage utiles pour améliorer les performances. Cependant, de nombreux programmeurs n'ont pas mis à niveau vers Java 8 ou une version ultérieure pour le développement. Du point de vue du développeur, cet article décrit les fonctionnalités du langage Java dans Java 8 et les versions ultérieures.

Tout d'abord, Java 8 est sans doute une version révolutionnaire pour la plupart des programmeurs Java. Ses fonctionnalités les plus connues sont les expressions stream et lambda, qui permettent la programmation fonctionnelle et activent Java. C'est exactement pourquoi de nombreux fournisseurs de cloud sont actifs depuis longtemps avec un excellent support pour Java 8, même si Oracle a arrêté la mise à jour.

Installation du SDK Cloud d'Alibaba pour Java

De nombreux programmeurs n'ont pas mis à niveau vers une version ultérieure à Java 8 pour le développement, nous couvrons donc les fonctionnalités linguistiques des versions ultérieures. Cet article se concentre sur le développement et ignore les garbage collection (GC), les compilateurs, les modules Java et les plates-formes. Ces sujets peuvent être traités dans d'autres articles. Les fonctionnalités suivantes jouent un rôle dans l'écriture de code:

Avec Java 13 bientôt disponible, toutes les versions de Java de Java 9 à Java 13 sont couvertes. Les versions Java ont été réglées, des aperçus sont introduits en fonction de la version, puis des améliorations et des améliorations sont apportées en fonction des commentaires des utilisateurs. Cet article ne précise pas spécifiquement quelle version a quelle fonctionnalité. Cependant, vous pouvez le considérer comme un mélange de fonctionnalités de toutes les versions de Java 8 et supérieures. La source de cet article est une introduction détaillée à chaque version de Java dans la section «Fonctionnalités et Pluralsight» du site officiel Java.

Var - Inférence de type de variable locale

Java prend en charge les génériques, mais si le type ne se soucie pas vraiment de la longueur, utilisez le mot-clé var. Cela simplifie grandement votre code. L'EDI Java fonctionne parfaitement avec var, vous n'avez donc pas à gérer souvent les conseils de code.


Map<String, List<Map<String,Object>>>  store = new ConcurrentHashMap<String, List<Map<String,Object>>>();
        Map<String, List<Map<String,Object>>>  store = new ConcurrentHashMap<>();
        Map<String, List<Map<String,Object>>>  store = new ConcurrentHashMap<String, List<Map<String,Object>>>();
  //lambda
  BiFunction<String, String, String> function1 = (var s1, var s2) -> s1 + s2;
        System.out.println(function1.apply(text1, text2));

Copiez le fichier confd dans le répertoire bin et démarrez confd.

sudo cp bin/confd /usr/local/bin
confd

En pratique, de petites restrictions sont attendues, telles que l'attribution d'une valeur à une valeur Null. Mais ce ne sont pas de gros problèmes, vous pouvez donc commencer tout de suite.

Poignée de processus

L'appel de commandes système en Java est rare. Bien sûr, la plupart du temps, vous utilisez Process Builder pour cela. Une autre fonctionnalité est l'amélioration de Process Handle qui peut obtenir les informations de mise à jour d'autres processus. ProcessHandle est utile pour obtenir la commande de démarrage et l'heure de début de tous les processus, d'un processus spécifique, etc.

ProcessHandle ph =  ProcessHandle.of(89810).get();
System.out.println(ph.info());

Méthode d'usine de collecte

N'avez-vous pas encore créé une ArrayList ou un HashSet en utilisant la nouvelle méthode? Vous pouvez être en retard. Utilisons directement la méthode factory.

Set<Integer> ints = Set.of(1, 2, 3);
List<String> strings = List.of("first", "second");

Nouvelle API pour les classes de chaînes

Il n'est pas possible de lister toutes les nouvelles API ici, mais avec certaines API importantes, vous pouvez vous débarrasser des StringUtils tiers. Les API suivantes sont repeat, isEmpty, isBlank, strip, line, indent, transform, trimIndent, formatted.

Prend en charge HTTP 2

Il est plus facile d'utiliser OkHTTP 3, mais si vous ne voulez pas d'autres packages de développement et que vous voulez vous en tenir à HTTP 2, c'est très bien. Java prend en charge HTTP 2 et prend en charge les modèles de programmation synchrones et asynchrones. De plus, le code est fondamentalement le même.

HttpClient client = HttpClient.newHttpClient();
        HttpRequest req =
                HttpRequest.newBuilder(URI.create("https://httpbin.org/ip"))
                        .header("User-Agent", "Java")
                        .GET()
                        .build();
        HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
        System.out.println(resp.body());

Bloc de texte (JDK 13)

Les versions antérieures vous obligeaient à saisir de longues phrases et à éviter les doubles guillemets. La lisibilité sera pire. Par exemple:

String jsonText = "{"id": 1, "nick": "leijuan"}";

Nouvelle méthode de bloc de texte:

//language=json
  String cleanJsonText = """
        {"id": 1, "nick": "leijuan"}""";

C'est beaucoup plus simple, non? Vous n'avez pas à vous soucier d'échapper des guillemets doubles ou de partager et de convertir des copies, en vous concentrant sur l'écriture de code.

Attendez une minute, qu'est-ce que le // language = json a ajouté avant cleanJsonText? Il s'agit d'une fonctionnalité d'IntelliJ IDEA et les blocs de texte sont sémantiques. Ajoutez // language = json à votre code HTML, JSON ou SQL et vous obtiendrez immédiatement un indice de code.

Les blocs de texte correspondent également aux caractéristiques des modèles de base. Introduisez une variable de contexte dans le bloc de texte et entrez% s pour appeler la méthode formatée. Ceci termine votre travail.

//language=html
    String textBlock = """
    <span style="color: green">Hello %s</span>""";
    System.out.println(textBlock.formatted(nick));

Améliorations du commutateur

Étiquettes de flèche

Avec l'introduction de la flèche de commutation "→", il n'est plus nécessaire de faire autant de sauts de ligne. L'exemple de code est présenté ci-dessous.

//legacy
    switch (DayOfWeek.FRIDAY) {
        case MONDAY: {
            System.out.println(1);
            break;
        }
        case WEDNESDAY: {
            System.out.println(2);
            break;
        }
        default: {
            System.out.println("Unknown");
        }
    }
    //Arrow labels
    switch (DayOfWeek.FRIDAY) {
        case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
        case TUESDAY -> System.out.println(7);
        case THURSDAY, SATURDAY -> System.out.println(8);
        case WEDNESDAY -> System.out.println(9);
    }

Changer de formule

Cela signifie que le commutateur a une valeur de retour. L'exemple de code est illustré ci-dessous.

//Yielding a value
    int i2 = switch (DayOfWeek.FRIDAY) {
        case MONDAY, FRIDAY, SUNDAY -> 6;
        case TUESDAY -> 7;
        case THURSDAY, SATURDAY -> 8;
        case WEDNESDAY -> 9;
        default -> {
            yield 10;
        }
    };

Le mot-clé yield représente la valeur de retour de l'expression de commutateur.

Utilisation de ces fonctionnalités

Toutes ces fonctionnalités semblent bonnes, mais comment pouvez-vous les utiliser pendant que vous travaillez encore sous Java 8? Que pouvons-nous faire d'autre en plus de considérer ces fonctionnalités? s'il te plait ne t'inquiète pas. J'ai trouvé une solution.

Cet élément prend en charge la compilation transparente de toute la syntaxe JDK 12+ dans des machines virtuelles Java 8. En d'autres termes, exécuter ces syntaxes sur Java 8 n'est pas un problème. Toutes ces fonctionnalités sont également disponibles dans l'environnement Java 8.

Alors, comment peut-il être utilisé? Tout cela est très simple et facile.

Tout d'abord, téléchargez le dernier JDK, tel que JDK 13, et ajoutez jabel-java-plugin à vos dépendances.

<dependency>
            <groupId>com.github.bsideup.jabel</groupId>
            <artifactId>jabel-javac-plugin</artifactId>
            <version>0.2.0</version>
  </dependency>

Réglez ensuite le plug-in du compilateur de Maven et définissez la source sur la version Java requise, telle que Java 13. Les cibles et les versions peuvent être définies sur Java 8. IntelliJ IDEA peut être automatiquement reconnu et n'a pas besoin d'être ajusté.

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>13</source>
                    <target>8</target>
                    <release>8</release>
                </configuration>
</plugin>

Commençons une expérience confortable avec ces fonctionnalités.

Aperçu

Dans ce blog, nous avons couvert certaines des fonctionnalités les plus populaires et les plus utiles de Java. Certaines fonctionnalités utiles, telles que les ajustements d'API, ne sont pas mentionnées dans cet article. Mais vous pouvez toujours le partager avec notre communauté via des blogs et des forums.

Recommended Posts

Java version 8 et fonctionnalités ultérieures
Fonctionnalités Java
Fonctionnalités Java
Nouvelles fonctionnalités de Java 9 et exemple de code
[Java] À propos des fonctionnalités de Java 12
Vérification de la version Java
À propos des fonctionnalités Java
java1.8 nouvelles fonctionnalités
Java et JavaScript
Téléchargez et installez Eclipse (Java) (version Mac)
XXE et Java
Consulter le mémo de la copie de fichier de Java 1.7 ou version ultérieure
Caractéristiques prévues de Java
[Java] Convertir la version PDF
Getter et Setter (Java)
[Java] Thread et exécutable
Java vrai et faux
Comparaison de la notation de la version Java
[Java] Comparaison des chaînes de caractères et && et ||
Changement de version Java (mémorial)
Java - Sérialisation et désérialisation
[Java] Arguments et paramètres
timedatectl et Java TimeZone
[Java] Branchement et répétition
[Java] Types de variables et types
[Java] Trois fonctionnalités de Java
java (classe et instance)
[Java] Surcharge et remplacement
Etudier Java # 2 (\ marque et opérateur)
Apprentissage du framework Java # 1 (version Mac)
Gestion des versions Java sur macOS
Comment abaisser la version java
[Java] Différence entre == et égal
[Java] Zone de pile et zone statique
[Java] Classe générique et méthode générique
Programmation Java (variables et données)
Cryptage et décryptage Java PDF
Nouvelles fonctionnalités de Java7 à Java8
Java et Iterator Part 1 External Iterator Edition
Profils et fonctionnalités de la CLI Micronaut
Gestion des versions Java avec SDKMAN
Instructions Java if et switch
Définition et instanciation de classe Java
Apache Hadoop et Java 9 (partie 1)
[Java] À propos de String et StringBuilder
[Java] HashCode et remplacement égal
Gestion des versions Java avec jenv
☾ Instruction Java / Repeat et instruction de contrôle de répétition
Méthodes Java et surcharges de méthodes
Changer la version java sur CentOS
java Generics T et? Différence
Avantages et inconvénients de Java
Simplifier le changement de version Java (Mac)
java (branchement conditionnel et répétition)
À propos du package Java et de l'importation
[Java] Téléchargez une image et convertissez-la en Base64
Histoire de remplacement C # et Java
Méthodes et classes abstraites Java
Instructions Java while et for
Encapsulation Java et getters et setters
Parcourez Java et MySQL PATH avec des variables d'environnement [version Windows]