newInstanceメソッド(形式2)
説明
パラメタtypeの表すクラスのインスタンスをExplicitメモリブロックに直接生成します。パラメタargsに指定した値がインスタンスを生成するコンストラクタの引数として渡されます。パラメタで指定したクラスのインスタンスのコンストラクタなどによる初期化で生成されるオブジェクトについては,Javaヒープに生成します。
形式
public Object newInstance(Class type, Object... args);
パラメタ
例外
戻り値
このオブジェクトが表すExplicitメモリブロックに生成されたインスタンスへの参照を返却します。
共通エラーチェックをして,処理できないと判定した場合,type.getConstructor(arg_types※)として,java.lang.reflect.Constructorインスタンスを取得します。この場合,java.lang.reflect.Constructorをレシーバ,パラメタargsをパラメタとして,java.lang.reflect.Constructor.newInstance(Object... initargs)のメソッドを呼び出し,その結果を返却します。共通エラーチェックについては,「13.6 Explicitメモリブロックを制御する処理のエラーチェック(共通エラーチェック)」を参照してください。
注意事項
パラメタtypeには,publicクラスを与えることを推奨します。
プリミティブ型を引数とするコンストラクタを呼び出すことはでききません。プリミティブ型を引数とするコンストラクタを呼び出す場合は,newInstanceメソッド(形式3)を使用します。次にnewInstanceメソッド(形式3)を使用したコード例を示します。
import JP.co.Hitachi.soft.jvm.MemoryArea.*;
import java.lang.reflect.*;
public class test1 {
public static void main(String[] args) throws Exception {
ExplicitMemory em = new BasicExplicitMemory();
TheClass obj = null;
Constructor cons = TheClass.class.getConstructor(new Class[]{int.class});
obj = (TheClass)em.newInstance(cons,1); // 実行成功
obj = (TheClass)em.newInstance(TheClass.class,1); // NoSuchMethodExceptionをスロー
}
}
public class TheClass {
public TheClass(int i){}
}