

以下のようにClass.forNameで取得したクラスをインスタンス化
しようとしていますが、できません
サブクラスは.newInstance()でインスタンス化できないのでしょうか?
代替の方法はありますか?
ーーーーーーーーーーーーーーーー
public class test4121 {
public static void main(String[] args) throws Throwable {
new test4121();
}
public test4121() throws Throwable {
//これは実行できるが
test4121_2 test = new test4121_2();
//これはできない
Class.forName("test4121$test4121_2").newInstance();
}
class test4121_2{
}
}
ーーーーーーーーーーーーーーーー
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No.1 の方も指摘されている通り、サブクラスではなく内部クラスで、含まれているクラス(test4121)のオブジェクトへの参照を持つ必要が有るので、インスタンス化に失敗したのかと。
内部クラス(のオブジェクト)から含まれているクラス(のオブジェクト)の非staticフィールド・メソッドにアクセスする必要が無いのなら、内部クラスの宣言にstaticを付けることでも、インスタンス化できる様になります。
例) -----------------------------------------------------------------
static class test4121_2{
}
---------------------------------------------------------------------
No.1
- 回答日時:
サブクラスではなくて、内部クラスのことだな。
こいつは、ちょっと難しい。単純にnewInstanceすればいいというわけじゃない。このへんはリフレクションについて理解してないといけないんだが、要するに、コンストラクタのオブジェクトConstructorを取得し、これからnewInstanceすれば内部クラスのインスタンスを動的に取得できるはず。こんな感じ。
Class arg[] = {getClass()};
Constructor c = Class.forName("test4121$test4121_2").getConstructor(arg);
Object obj[] = {this};
c.newInstance(obj);
要するに内部クラスのインスタンス生成は、実はJava内部ではそれが含まれているオブジェクトの情報を引数に渡してコンストラクタを呼び出しているため、単純にnewInstanceではnewされない、という仕組みになっているわけだ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
import と extends について
-
C#にて別クラスの関数を使いたい
-
関数内の変数に<summary>コメン...
-
構造 他のクラスの構造体を別...
-
C++でfriendクラスにしているの...
-
クラス間でのデータ参照
-
Java リフレクションについて
-
c++,ある関数のクラスから別の...
-
jarファイル内のクラスをインス...
-
C++/C#間での構造体の引き渡し...
-
範囲外の数値を代入したらエラ...
-
Tomcatのpropertiesファイルの...
-
java-別クラスの変数の使い方を...
-
無名パッケージからのインポート
-
a href="..." とServlet
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
-
レコード件数の表示
-
オブジェクト参照がオブジェク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
javaでメインクラスが見つから...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
a href="..." とServlet
-
無名パッケージからのインポート
-
visual studioのデザイナ画面で...
-
import と extends について
-
Java リフレクションについて
-
C#のクラスライブラリでメッセ...
-
C# インターフェイスの実装
-
親クラスから子クラスへアクセス。
-
c++,ある関数のクラスから別の...
-
Java
-
構造 他のクラスの構造体を別...
-
C++で親クラスの関数を呼び出す...
-
C++でfriendクラスにしているの...
-
java-別クラスの変数の使い方を...
-
下記のコードを実行すると、Mai...
おすすめ情報