[Java] Modul

Was ist ein Modul?

Traditionelle Verpackungsprobleme

Zugriffsrechte können nicht für jedes Paket festgelegt werden

Die JAR-Datei kann keine Abhängigkeiten darstellen

Gelöst mit Modulen!

Modul grundlegend

module-info.java


//Modulname foo
//Java im Foo-Modul.net.brauche http
module foo {
  requires java.net.http;
  requires mylib;
  requires gson;
}

Standardbibliotheksmodul

Grundmodul

Übergangsabhängigkeit

module-info.java


module java.se { 
  requires transitive java.compiler;
  requires transitive java.datatranfer;
  requires transitive java.desktop;
//Abkürzung
}

Paketfreigabe

module-info.java


module mylib { 
  exports mylib.lib;
}
//OK
import mylib.lib.MainLib;
//NG! interna;Paket ist unsichtbar
//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;
}

Paketfreigabe nur für bestimmte Module

module-info.java


module mylib {
  exports mylib.lib to foo;
}

Private Methode öffnen

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); //Error
      System.out.println(name.get(m));

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

Deklarieren Sie ein Paket mit ** öffnet Direktive ** und lösen Sie es!

module-info.java


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

Spezialmodul

Automatisches Modul

Bestimmt aus Manifestinformationen

MANIFEST.MF


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

Bestimmt durch den Dateinamen .jar

Anonymes Modul

Koexistenz mit Nicht-Modul-Bibliotheken

//NG-Beispiel Laufzeitfehler
import com.google.gson.Gson;

public class NoModuleLib {

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

    //Geben Sie das Ergebnis der Konvertierung des Objektinhalts in JSON aus
    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("Titel:%s(%s)",
        this.title, this.url);
  }
}

Fügen Sie der Ausführungsoption explizit ein Modul hinzu

Recommended Posts

[Java] Modul
Java
Java
Java lernen (0)
Java studieren ―― 3
[Java] -Array
Java geschützt
[Java] Anmerkung
Java-Array
Java studieren ―― 9
Java Scratch Scratch
Java-Tipps, Tipps
Java-Methoden
Java-Methode
Java (Konstruktor)
Java-Array
[Java] ArrayDeque
Java (überschreiben)
Java (Methode)
Java Day 2018
Java-Zeichenfolge
Java (Array)
Java statisch
Java-Serialisierung
Java Anfänger 4
JAVA hat bezahlt
Java studieren ―― 4
Java (gesetzt)
Java-Shell-Sortierung
[Java] compareTo
Java studieren -5
Java reflektierend 获 获 举
Java (Schnittstelle)
Java-Memorandum
Java-Array
Java studieren ―― 1
[Java] Array
[Java] Polymorphismus
Java # 0 studieren
Java-Überprüfung
Java-Framework
Java-Funktionen
[Java] Vererbung
FastScanner Java
Java-Funktionen
Java Anfänger 3
Java-Memo
Java (Kapselung)
Java-Vererbung
[Java] Überladung
Java-Grundlagen
Java dekompilieren
[Java] Anmerkung
Java Note
Java Anfänger
Java (add2)
JAVA (Karte)
[Java] -Schnittstelle
Java9-Sammlung
Java-Grundlagen