以下のように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で質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- HTML・CSS ブロックエディターで作りつつ、画像を挿入しつつ、画像にスタイルシートのコードを付ける方法はありますか 1 2022/08/23 18:46
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラス間でのデータ参照
-
構造 他のクラスの構造体を別...
-
関数内の変数に<summary>コメン...
-
デシリアライズでオブジェクト...
-
違うクラスからの変数の共有化
-
型Containerのメソッドadd(S...
-
C#にて別クラスの関数を使いたい
-
visual studioのデザイナ画面で...
-
c++,ある関数のクラスから別の...
-
C#のクラスライブラリでメッセ...
-
java-別クラスの変数の使い方を...
-
範囲外の数値を代入したらエラ...
-
例えば、以下のようなクラスでm...
-
import と extends について
-
ゲーム画面の項目選択の結果を...
-
javaのメソッドの戻り値について
-
SwingでgetContentPaneのエラー...
-
ネストしたenumへのリフレクシ...
-
C++でfriendクラスにしているの...
-
Java
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
範囲外の数値を代入したらエラ...
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
C#にて別クラスの関数を使いたい
-
java-別クラスの変数の使い方を...
-
a href="..." とServlet
-
C++でfriendクラスにしているの...
-
親クラスから子クラスへアクセス。
-
構造 他のクラスの構造体を別...
-
Java リフレクションについて
-
import と extends について
-
C#でほかのファイルにある自作...
-
C#のクラスライブラリでメッセ...
-
Java
-
アップキャスト、ダウンキャス...
-
無名パッケージからのインポート
-
違うクラスからの変数の共有化
-
SwingでgetContentPaneのエラー...
-
ひとつのファイルにクラスは1つ?
おすすめ情報