きっかけ
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 -release 13 test.java
コンパイルすると、警告が出てくるが、問題はない。
--enable-preview
でpreview機能を有効化する。
こいつを使う場合は、-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が多くなる感じかなと思う。