質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

リフレクション

リフレクションとは、プログラムの実行過程でプログラム自身の構造を読み取り、編集する事が出来るプロセスのことを指します

Q&A

0回答

666閲覧

java リフレクション 絶対パスを引数にクラス生成 Class.forName()メソッド

PapurikaYuka

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

リフレクション

リフレクションとは、プログラムの実行過程でプログラム自身の構造を読み取り、編集する事が出来るプロセスのことを指します

0グッド

0クリップ

投稿2019/09/08 06:04

前提・実現したいこと

【前提】
・gradleとjava言語を用いてソース自動生成ツールを開発しています。

【実現したいこと】
・javaのコマンドライン引数に記載したパスに格納されているjavaファイルをリフレクションしたいです。

【実行イメージ】
$ java 実行ファイル.java (リフレクションしたいjavaファイルが存在する絶対パス)

現在、コマンドライン引数に記載したパスに格納されているjavaファイルを実行ファイルの近くにコピーして
class.forName()メソッドでクラスオブジェクト生成しようと試みていましたが、
以下のようにエラーになってしまいます。

コピーは正常で、ファイル名はFQN形式で間違えておりません。

上記の「実現したいこと」に記載しました
絶対パスを引数にリフレクションをしたいです。

なにか良い解決策はございませんでしょうか。

みなさま
ご多用とは存じますが
お力添えいただけないでしょうか。
よろしくお願いいたします。

発生している問題・エラーメッセージ

java.lang.ClassNotFoundException: Template.Controller_register
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at tool.App.getMetaData(App.java:177)
at tool.App.main(App.java:99)
at tool.Main.main(Main.java:8)

該当のソースコード

//リフレクションを用いてファイル名からそのファイルのクラスをインスタンス化する
obj = Class.forName(fileInfo.getFileName()).newInstance();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2019/09/08 11:19

javaファイルを引数にということは、コンパイルがしたいということ?
PapurikaYuka

2019/09/08 22:08

リフレクションを用いるということは そういうことになるのかもです。 動的実行?のようなことをしたいのですが 伝わりますでしょうか?( ; ; ) 説明下手ですみません...
momon-ga

2019/09/09 11:31

動的実行?ごめんなさい。伝わりませんでした。 直接的な解決にはならないと思いますが、「java 動的コンパイル」で検索してみると何かすすむかもしれません。
momon-ga

2019/09/09 11:33

現状は、ClassNotFoundExceptionが発生してるので、インスタンスが作れません。 単純に、インスタンスを作りたいだけなら、コンパイルしてクラスパスに置いておけば、newInstanceでインスタンス化できます(引数無しコンストラクタがあれば)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問