Il semble que Java 10 (est-ce 18.3?) Apparaîtra bientôt, j'ai donc décrit ce que j'ai étudié et essayé avec la fonction ajoutée dans 9.
JShell JShell a été introduit. Vous pouvez exécuter du code de manière interactive à partir de la ligne de commande. Lorsque vous souhaitez exécuter un code simple, vous pouvez éviter de l'exécuter en utilisant un fichier de classe.
List.of、Set.of、Map.of Une méthode de fabrique a été ajoutée à la classe de collection.
List<String> list = List.of("café au lait", "Lait de fraise");
Set<String> set = Set.of("Lait Remon", "Lait de melon");
Map<String, String> map = Map.of("café au lait", "100 yens", "Lait de fraise", "120 yens");
La collection créée par la méthode of est immuable.
Avec l'introduction de la fonction module, il est devenu possible de clarifier la portée de la divulgation et les dépendances des modules. Les méthodes publiques telles que les bibliothèques étaient référencées dans des classes qui n'étaient pas censées être utilisées ... Vous pouvez également empêcher de telles choses. Référence: Project Jigsaw
Structure de dossier du côté appelé (jar) (1)
gyunyu/
┗━ src/
┗━ jp/gr/java_conf/masakado/gyunyu/
┣━ Coffee.java
┗━ util/
┗━ Utility.java
Coffee.java
public class Coffee {
public void print() {
Utility.output("café");
}
}
java.Utility.java
public class Utility {
public static void output(String name) {
System.out.println("c'est," + name + "C'est du lait.");
}
}
ʻUtility.output (...) `est censé être utilisé uniquement dans le projet gyunyu. Cette méthode n'est pas censée être exécutée de l'extérieur.
Compilez les deux fichiers ci-dessus pour créer gyunyu.jar.
javac -d bin -encoding UTF-8 src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .
Structure des dossiers de l'appelant (1)
sample/
┣━ src/
┃ ┗━ jp/gr/java_conf/masakado/sample/
┃ ┗━ Main.java
┗━ lib/
┗━ gyunyu.jar
Main.java
import jp.gr.java_conf.masakado.gyunyu.Coffee;
import jp.gr.java_conf.masakado.gyunyu.util.Utility;
public class Main {
public static void main(String[] args) {
(new Main()).execute();
}
public void execute() {
Coffee coffee = new Coffee();
coffee.print();
Utility.output("Appel inattendu: Ichigo"); //Se référer à une méthode qui n'est pas censée être exécutée de l'extérieur
}
}
Il fait référence à ʻUtility.output (...) de
gyunyu.jar`, qui n'est pas censé être exécuté de l'extérieur.
Si vous compilez et exécutez ceci
javac -d bin -cp lib\gyunyu.jar -encoding UTF-8 src\jp\gr\java_conf\masakado\sample\Main.java
java -cp lib\gyunyu.jar;bin jp.gr.java_conf.masakado.sample.Main
Il sera affiché comme ci-dessous.
Créez module-info.java
sur le côté appelé (jar).
Structure de dossier du côté appelé (jar) (2)
gyunyu/
┗━ src/
┣━ jp/gr/java_conf/masakado/gyunyu/
┃ ┣━ Coffee.java
┃ ┗━ util/
┃ ┗━ Utility.java
┗━ module-info.java
module-info.java
module jp.gr.java_conf.masakado.gyunyu {
exports jp.gr.java_conf.masakado.gyunyu;
}
ʻExports`: spécifiez le package à publier vers l'extérieur.
Le nom du module est le même que le nom du package, mais vous n'avez pas à le faire correspondre avec le nom du package et vous pouvez le nommer librement. Compilez-le pour créer un fichier jar.
javac -d bin -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .
Placez le gyunyu.jar
créé dans sample / lib et créez module-info.java
.
Structure des dossiers de l'appelant (1)
sample/
┣━ src/
┃ ┣━ jp/gr/java_conf/masakado/sample/
┃ ┃ ┗━ Main.java
┃ ┗━ module-info.java
┗━ lib/
┗━ gyunyu.jar
module-info.java
module jp.gr.java_conf.masakado.sample {
requires jp.gr.java_conf.masakado.gyunyu;
}
requires
: Spécifiez le module dépendant (utilisé).
Compilez en spécifiant gyunyu.jar
avec l'option -p
.
javac -d bin -p lib\gyunyu.jar -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\sample\Main.java
Le message d'erreur suivant s'affiche et la compilation échoue.
Paquet jp.gr.java_conf.masakado.gyunyu.util ne peut pas être affiché
(Paquet jp.gr.java_conf.masakado.gyunyu.util est un module jp.gr.java_conf.masakado.Déclaré par gyunyu mais non exporté)
Si vous supprimez ʻUtility.output (...) décrit dans
Main.java`, la compilation passera.
Vous pouvez consulter les informations du module en exécutant la commande jar avec l'option -d
spécifiée comme indiqué ci-dessous.
jar -d -f lib\gyunyu.jar
exports jp.gr.java_conf.masakado.gyunyu
requires java.base mandated
contains jp.gr.java_conf.masakado.gyunyu.util
ʻExports: paquet publié
requiert: modules dépendants
contains`: packages qui ne sont pas répertoriés dans les exportations mais qui sont inclus dans le fichier jar
Comme la dépendance est devenue plus facile à comprendre en introduisant la fonction module, la compilation s'est bien déroulée, donc quand j'ai essayé de l'exécuter, le JAR n'était pas suffisant et une erreur s'est produite ... J'ai senti que la possibilité que quelque chose comme ça se produise diminuerait. Je n'ai pas encore traité des JAR qui prennent en charge les modules, donc il y a peut-être longtemps que je peux bénéficier des fonctions du module.
Recommended Posts