CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

JavaScript

第7章 Nashorn JavaScript エンジンの活用 : 問題 6 : シェルコマンドのパイプライン

問題 一連のシェルコマンドを受け取り、あるコマンドの出力を次のコマンドの入力として接続し、最後の出力を返す JavaScript の pipe 関数を書け 例えば pipe('find .', 'grep -v class', 'sort') と呼び出す 解答 -scriptingオプション付きでjjsを起動して…

第7章 Nashorn JavaScript エンジンの活用 : 問題 5 : JavaScript で Java クラスを拡張

問題 以下の JavaScript のコード var arr = new (Java.extend(java.util.ArrayList)) { add : function(x) { print('Adding ' + x); return Java.super(arr).add(x) } } により、Java のArrayListクラスのaddメソッドをログ出力するように拡張した しかし、…

第7章 Nashorn JavaScript エンジンの活用 : 問題 4 : string から java.lang.String へキャスト

問題 文字列から部分文字列を抽出することで、リテラルでない JavaScript の文字列を生成し、それに対してgetClassメソッドを呼び出せ 次にjava.lang.String.class.castメソッドへ渡せ このとき何が起こるか? 解答 ■ リテラルでない JavaScript の文字列の型…

第7章 Nashorn JavaScript エンジンの活用 : 問題 3 : BigInteger と Number

問題 jjs を実行して、次の呼び出しを行え var big = new java.math.BigInteger('1234567890987654321') big の値を表示するとどうなるか? big の下3桁big.mod(java.math.BigInteger('1000'))は何か? 解答 jjs> var big = new java.math.BigInteger('1234567…

第7章 Nashorn JavaScript エンジンの活用 : 問題 2 : jjs でラムダ式

問題 jjs を実行し、Stream ライブラリを使用して次の問題に対する解法をインタラクティブに求めよ あるファイルに含まれている長い単語(12文字より長い)を、重複なしで全てソートして表示せよ 解答 まず、Streamの要素をコンソールに表示して元のStreamを…

第7章 Nashorn JavaScript エンジンの活用 : 問題 1 : jjs で Java のクラスを試す

問題 例えばZonedDateTimeクラスなど、試してみたい Java API を選んで オブジェクトの生成 メソッドの呼び出し 戻り値の表示 など、jjs を使った実験を行え 解答 ■ オブジェクトの生成 ZonedDateTimeクラスにコンストラクタはないので、ファクトリメソッド…

第7章 Nashorn JavaScript エンジンの活用

Java 7 で、動的型付け言語を効率的に実行するために InvokeDynamic というバイトコードが新たに導入された 例えば、JavaScript で、次のような関数があった場合 function sum(a, b) { return a + b; } a + bの + 演算子は、文字列の連結なのだろうか? それ…