(rontolisp) docs
← java パッケージの関数

java:new

(java:new "fully.qualified.ClassName" args...)

リフレクションでホスト (Java) オブジェクトを生成します。引数に最も適合するパラメータを持つコンストラクタを選び、#<java <class-name>> と表示される不透明な java オブジェクトを返します。JVM 専用の java 連携パッケージの一部であり、インタプリタと JVM クラスへのコンパイルの両方で利用できます (WASM バックエンドでは利用できません)。また実行時にクラスが存在しリフレクション可能である必要があります。Java 連携ガイドを参照してください。

文字列 "ab" から java.lang.StringBuilder を生成し、その length メソッドが 2 を返します。

クラス名にはコンストラクタのパラメータ型を付けて直接指定できます: (java:new "java.lang.StringBuilder(int)" 64)。呼び出しは実行前に一度だけ解決されます。引数の種別がテキストから分かればただ 1 つのコンストラクタへ、分からなければコンストラクタの集合へ解決され、実行時に引数の種別でその中から選びます (ガイドの実行前の呼び出し解決)。

引数の後ろには、関数の引数を Java がラムダを変換するのと同じ形で変換する :functional (ガイドの java:proxy によるコールバック) 、その関数に Java の false を |false| として渡す :java-false (ガイドの Java の false を受け取る)、byte[] をそのオクテットを持つ (unsigned-byte 8) のベクタとして渡す :octets (ガイドのバイト列を受け取る)、その関数を Java に経由させる関数を指定する :through と関数 (ガイドの関数を別の関数経由で呼ばせる) を置けます。