エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Javaでpreview機能を試すやり方

きっかけ

Java13の機能を試そうとしたら、--enable-previewを付けてコンパイルしろやアホって言われて、ちょっと苦戦したので晒す。

開発環境

Visual Studio Code

バージョン: 1.35.1 (system setup)
コミット: c7d83e57cd18f18026a8162d042843bda1bcf21f
日付: 2019-06-12T14:30:02.622Z
Electron: 3.1.8
Chrome: 66.0.3359.181
Node.js: 10.2.0
V8: 6.6.346.32
OS: Windows_NT x64 10.0.17763

Java

$ java -version
openjdk version "13-ea" 2019-09-17
OpenJDK Runtime Environment (build 13-ea+25)
OpenJDK 64-Bit Server VM (build 13-ea+25, mixed mode, sharing)

実験用のソース

今回は、Java13の機能を試すときに悩んだので、そのまま、そのソースを利用。

public class test {
  public static void main(String[] args) {

    String text = """
    <html>
      <body>
        <p>Hello, world</p>
      </body>
    </html>
    """;
    
    System.out.println(text);
  }
}

最近、jsばっかりやるせいで、クラスを小文字から書いても抵抗がない。
Javaやってたころは、かなり違和感あったかもな。。。

本題

コンパイル

下記のコマンドでできる。 $ javac --enable-preview -source 13 test.java

コンパイルすると、警告が出てくるが、問題はない。
--enable-previewpreview機能を有効化する。
こいつを使う場合は、-source-releaseオプションが必須。
なぜなら、どの時点のプレビュー機能を使うのか判断できないから(だと思う)
今回は、Java13を使うので、13を指定

ちなみに、releaseでやると、下記の感じになる。
$ javac --enable-preview -release 13 test.java

実行

$ java --enable-preview test

最初に実行したときは、-source を付けてしまい、怒られた。。。
同じことした人は、たぶん、多いと思うんだけど、どうかな?

理屈としては、コンパイル時に対象のバージョンを指定したから、バイトコードでは不要なんだろうなと思う。
だったら、enable-previewもなくていいじゃんって、思ってしまうけどな。。。

感想・雑記

本質とは違うところで悩んでしまったが、今後、early-access版を試すときに必須になりそうなので、覚えたほうが良さそう。

IDEは、リリース済みのJDKなら、IntelliJ使うんだけど、未リリースの奴は、vscode使うことが多い。
あまり制約が無いのと、日本語表記があるから、未知のことをやる場合は、vscodeが多くなる感じかなと思う。

参考サイト

ずんだの縦読み問題 Java 12 Early-Access 版 - Qiita