Module [Java]

Qu'est-ce qu'un module?

Problèmes d'emballage traditionnels

Les droits d'accès ne peuvent pas être définis pour chaque package

Le fichier .jar ne peut pas représenter les dépendances

Résolu en utilisant des modules!

Module de base

module-info.java


//Nom du module foo
//java dans le module foo.net.besoin de http
module foo {
  requires java.net.http;
  requires mylib;
  requires gson;
}

Module de bibliothèque standard

Module de base

Dépendance transitionnelle

module-info.java


module java.se { 
  requires transitive java.compiler;
  requires transitive java.datatranfer;
  requires transitive java.desktop;
//Abréviation
}

Libération du package

module-info.java


module mylib { 
  exports mylib.lib;
}
//OK
import mylib.lib.MainLib;
//NG! interna;Le paquet est invisible
//import mylib.internal.Sublib;

public class ModuleClient {

  public static void main(String[] args) {
    var main = new MainLib();
    main.run();
  }
}
module foo {
  requires java.net.http;
  requires mylib;
  requires gson;
}

Publication de package uniquement pour des modules spécifiques

module-info.java


module mylib {
  exports mylib.lib to foo;
}

Méthode privée ouverte

import java.lang.reflect.InvocationTargetException;
import mylib.lib.MainLib;

public class ModuleClient2 {

  public static void main(String[] args) {
    try {
      var clazz = MainLib.class;
      var con = clazz.getConstructor();
      var m = con.newInstance();
      var name = clazz.getDeclaredField("name"); 
      name.setAccessible(true); //Erreur
      System.out.println(name.get(m));

    } catch (InstantiationException | IllegalAccessException |
        IllegalArgumentException | InvocationTargetException
        | NoSuchMethodException | SecurityException | NoSuchFieldException e) {
      e.printStackTrace();
    }
  }
}

Déclarez un paquet avec ** la directive opens ** et résolvez-le!

module-info.java


module mylib {
  opens mylib.lib;
  exports mylib.lib;
}

Module spécial

Module automatique

Déterminé à partir des informations du manifeste

MANIFEST.MF


Manifest-Version: 1.0
Automatic-Module-Name: hoge.bar

Déterminé par le nom de fichier .jar

Module anonyme

Coexistence avec des bibliothèques non-modules

//Exemple NG Erreur d'exécution
import com.google.gson.Gson;

public class NoModuleLib {

  public static void main(String[] args) {
    var g = new Gson();
    var a = new Article("Changements de Java 11", "https://codezine.jp/article/corner/751");

    //Sortir le résultat de la conversion du contenu de l'objet en JSON
    System.out.println(g.toJson(a));
  }
}

Article.java


public class Article {
  private String title;
  private String url;

  public Article(String title, String url) {
    this.title = title;
    this.url = url;
  }

  @Override
  public String toString() {
    return String.format("Titre:%s(%s)",
        this.title, this.url);
  }
}

Ajouter explicitement un module dans l'option d'exécution

Recommended Posts

Module [Java]
Java
Java
Apprendre Java (0)
Étudier Java ―― 3
[Java] tableau
Java protégé
[Java] Annotation
Tableau Java
Étudier Java ―― 9
Java scratch scratch
Astuces Java, astuces
Méthodes Java
Méthode Java
java (constructeur)
Tableau Java
[Java] ArrayDeque
java (remplacement)
java (méthode)
Journée Java 2018
Chaîne Java
java (tableau)
Java statique
Sérialisation Java
java débutant 4
JAVA payé
Étudier Java ―― 4
Java (ensemble)
tri shell java
[Java] compareTo
Étudier Java -5
java réfléchissant 获 获 举
java (interface)
Mémorandum Java
Tableau Java
Étudier Java ―― 1
[Java] Array
[Java] Polymorphisme
Étudier Java # 0
Revue Java
framework java
Fonctionnalités Java
[Java] Héritage
FastScanner Java
Fonctionnalités Java
java débutant 3
Mémo Java
java (encapsulation)
Héritage Java
[Java] Surcharge
Les bases de Java
Décompiler Java
[Java] Annotation
note java
java débutant
Java (add2)
JAVA (Carte)
interface [java]
Collection Java9
Les bases de Java