자바9에 대한 조사

9466 단어 Java

개요


거의 자바 10 (18.3이죠?)라고 등장해 9의 추가 기능으로 조사한 일과 시도한 일을 담았다.

조사한 일


JShell


JShell을 가져왔습니다.
명령줄에서 대화 형식으로 코드를 실행할 수 있습니다.
간단한 코드를 실행하고 싶을 때 클래스 파일을 사용하는 번거로움을 줄일 수 있다.

List.of、Set.of、Map.of


컬렉션 클래스에 플랜트 방법이 추가되었습니다.
List<String> list = List.of("コーヒー牛乳", "いちご牛乳");
Set<String> set = Set.of("れもん牛乳", "めろん牛乳");
Map<String, String> map = Map.of("コーヒー牛乳", "100円", "いちご牛乳", "120円");
"of"방법으로 생성된 모음집은 정음판으로 변합니다.

모듈 기능


모듈 가져오기 기능을 통해 모듈의 공개 범위와 의존 관계를 명확히 할 수 있다.
라이브러리 등public방법은 사용할 생각이 없는 반에서 참조되었다
이런 일도 방지할 수 있다.
참조: Project Jigsaw

모듈 기능을 사용하지 않는 경우


호출된 측면 (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("コーヒー");
    }
}
java.Utility.java
public class Utility {
    public static void output(String name) {
        System.out.println("これは、" + name + "牛乳です。");
    }
}
Utility.output(...)gyunuyu 프로젝트에서만 사용
외부에서 집행할 방법을 구상하지 않았다.
상술한 두 파일을 컴파일하다.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 .
측면 폴더 구조 호출(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("想定していない呼び出し:いちご"); //外部から実行される事を想定していないメソッドを参照
    }
}
외부에서 실행되지 않은 gyunyu.jarUtility.output(...)를 참고했다.
이 작업을 컴파일하고 실행할 때
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
다음과 같이 표시됩니다.

모듈 기능 사용 시


호출자 (jar) 에서 만들기 module-info.java.
호출된 측면 (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: 외부에 공개할 패키지를 지정합니다.
모듈 명칭은 포장 명칭과 같지만 포장 명칭과 일치할 필요가 없고 자유롭게 명명할 수 있습니다.
이것을 컴파일해서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 .
생성된 gyunyu.jar를 Sample/lib에 놓고 제작module-info.java합니다.
측면 폴더 구조 호출(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: 의존 모듈을 지정합니다.-p 옵션 지정gyunyu.jar으로 컴파일합니다.
javac -d bin -p lib\gyunyu.jar -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\sample\Main.java
다음 오류 정보를 출력합니다. 컴파일에 실패했습니다.
パッケージjp.gr.java_conf.masakado.gyunyu.utilは表示不可です
(パッケージjp.gr.java_conf.masakado.gyunyu.utilはモジュールjp.gr.java_conf.masakado.gyunyuで宣言されていますが、エクスポートされていません)
Main.java에 기재된 Utility.output(...)를 삭제하면 컴파일링이 통과됩니다.

모듈 정보 표시


아래와 같이 -d 지정한 옵션이jar 명령을 실행할 때 모듈 정보를 참조할 수 있습니다.
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: 공개된 가방requires: 종속 모듈contains: exports에 기재되지 않았지만jar에 포함된 봉인

최후


모듈 기능을 가져와 의존 관계를 이해하기 쉬워졌기 때문에 컴파일링이 잘 진행되었는데 실행하니 JAR이 부족하고 오류가 발생하였다
이런 일은 발생할 가능성이 줄어들겠죠.
모듈을 지원하는 JAR을 아직 처리하지 않았기 때문에 모듈 기능의 은혜를 받을 수 있었던 것은 아마도 아주 오래된 일일 것이다.

좋은 웹페이지 즐겨찾기