Jvmは、JNIを呼び出すためメソッドが用意されている構造体。
JvmインスタンスはJvmBuilderで生成する。
use j4rs::Jvm;
let jvm: Jvm = JvmBuilder::new().〜.build()?;
Javaのオブジェクト(インスタンス)はInstance構造体で表される。
Javaのプリミティブ型の値やnullもInstanceで表される。
メソッド(やコンストラクター)の引数にはInvocationArg列挙型を渡す。
InvocationArgは、Javaとしての引数の型と値をペアで保持する。
Jvmの各メソッドの戻り型のResultは、標準ライブラリー(std)のResultではなく、j4rs::errors::Result。
これは以下のような感じで定義されている。(標準ライブラリーのResultのエイリアス(別名))
pub type Result<T> = std::result::Result<T, J4RsError>;
Jvmのメソッド(抜粋)。
メソッド | 説明 | 例 |
---|---|---|
deploy_artifact <T:
JavaArtifact>(&self, artifact: &T) -> Result<()> |
指定されたアーティファクト(jarファイル)をクラスパスに追加する。 | →アーティファクトの例 |
メソッド | 説明 | 例 | Java相当 |
---|---|---|---|
create_instance (&self, class_name: &str, inv_args: &[impl Borrow<InvocationArg>]) -> Result<Instance> |
指定されたクラスのインスタンスを生成する。 (コンストラクターを呼び出す) |
let s = jvm.create_instance("java.lang.String",
InvocationArg::empty())?; |
var s = new java.lang.String(); |
static_class (&self, class_name: &str) -> Result<Instance> |
指定されたクラスのstaticメソッドやstaticフィールドへのアクセス用Instanceを取得する。 | let system = jvm.static_class("java.lang.System")?; |
var systemOut = java.lang.System.out; |
invoke (&self,
instance: &Instance, method_name: &str, inv_args: &[impl Borrow<InvocationArg>]) -> Result<Instance> |
Instanceのメソッドを呼び出す。 | let arg = InvocationArg::try_from("abc")?; |
var arg = "abc"; |
field (&self, instance: &Instance, field_name: &str) -> Result<Instance> |
Instanceのフィールドの値を取得する。 | let point = jvm.create_instance("java.awt.Point",
InvocationArg::empty())?; |
var point = new java.awt.Point(); |
static_class_field (&self, class_name: &str, field_name: &str) -> Result<Instance> |
指定されたクラスのstaticフィールドの値を取得する。 Javaの列挙型の列挙子もこのメソッドで取得できる。 |
let system_out = jvm.static_class_field("java.lang.System",
"out")?; |
var systemOut = java.lang.System.out; |
invoke_static (&self, class_name: &str, method_name: &str, inv_args: &[impl Borrow<InvocationArg>]) -> Result<Instance> |
指定されたクラスのstaticメソッドを呼び出す。 | let arg = InvocationArg::try_from(123)?; |
var arg = 123; |
cast (&self, from_instance: &Instance, to_class: &str) -> Result<Instance> |
指定されたクラスにキャストしたInstanceを作る。 | let s = jvm.create_instance("java.lang.String",
InvocationArg::empty())?; |
var s = new java.lang.String(); |
check_equals (&self,
instance: impl Borrow<Instance>, inv_arg:
impl Borrow<InvocationArg>) -> Result<bool> |
Javaのequalsメソッドによる比較を行う。 プリミティブ型にも対応している。 →nullチェックの例 |
let s1 = jvm.create_instance("java.lang.String",
InvocationArg::empty())?; |
var s1 = new java.lang.String(); |
clone_instance (&self, instance: &Instance) -> Result<Instance> |
Instanceの複製を作る。 (Javaのcloneメソッドの呼び出しではない) |
let s = jvm.create_instance("java.lang.String",
InvocationArg::empty())?; |
メソッド | 説明 | 例 | Java相当 |
---|---|---|---|
to_rust <T>(&self, instance: Instance) -> Result<T> |
jInstanceをRustのデータ型の値に変換する。 →例 |
let t = jvm.invoke_static("java.lang.System", "currentTimeMillis",
InvocationArg::empty())?; |
long t = java.lang.System.currentTimeMillis(); |
to_rust_boxed <T>(&self, instance: Instance) -> Result<Box<T>> |
jInstanceをRustのデータ型の値に変換する。 | ||
java_list(&self, inner_class_name: impl Into<&str>, inv_args: Vec<impl TryInto<InvocationArg, Error=J4RsError>>) -> Result<Instance> |
JavaのListを作成する。 | let v = vec!["a", "b", "c"]; |
var list = java.util.Arrays.<java.lang.String>asList("a", "b", "c"); |
java_map(&self, key_class_name: impl Into<str>, value_class_name: impl Into<&str>, inv_args: HashMap<impl TryInto<InvocationArg, Error=J4RsError>, impl TryInto<InvocationArg, Error=J4RsError>>) -> Result<Instance> |
JavaのMapを作成する。 | let m = HashMap::from([ |
var map = java.util.HashMap<java.lang.String, java.lang.Integer>(); |