2010-12-13 10 views
0

オブジェクトを作成したいクラスパスのみを知りたい 助けてください。リフレクションパッケージを使用してクラスパスからオブジェクトを作成する方法

+1

あなたは_で何を意味するのか明確にすることができ_まさに情報を扱う必要がありますか? @ BalusCのコメントに+1してください。 –

+2

「クラスパス」とまったく同じ意味ですか? 'java.lang.String'の完全修飾クラス名、' java.net.URL'のクラスパス位置( 'ClassLoader#getResource()'によって取得されたもの)、または 'java.io.ファイル '? – BalusC

+0

クラスパス? "org.mycompany.FirstClass"という行に沿って何かを意味するのであれば、あなたは行き​​たい!この種の文字列は完全修飾名と呼ばれます。 – Rekin

答えて

5

あなたはStringに完全修飾クラス名を持っている場合は、Class#forName()Class#newInstance()を使用しています。

Object o = Class.forName("com.example.Foo").newInstance(); 

しかし、クラスパスにクラスが既に存在し、(暗黙の)デフォルトコンストラクタが必要です。

URLにクラスの場所がある場合は、URLClassLoaderを使用し、それを引数として受け入れる別のClass#forName()メソッドに渡します。その後、あなたの代わりにFileでそれを持っている場合

URL url = getItSomehow(); 
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { url }); 
Object o = Class.forName("com.example.Foo", true, classLoader).newInstance(); 

または、URL最初に変換:「?私はそのクラスパスを知っている」

File file = getItSomehow(); 
URL url = file.toURI().toURL(); 
// Continue with URLClassLoader. 
+0

でも、クラスに属しているメソッドを呼び出そうとしている場合は、そのパスまたは修飾名を知っています –

+0

これは別の質問ですので、答えの代わりにチュートリアルのリンクhttp://download.oracle。 com/javase/tutorial/reflect/member/methodInvocation.html貼り付いている場合は、右上にある[Ask Question]ボタンを押します。できれば問題を再現する小さなコードスニペットと一緒に、特定のステップに関する詳細を含めることを忘れないでください。適切な用語を選択して使用することに注意してください。 "クラスパス"という言葉は、あなたが思った通りのものではありませんでした。 – BalusC

+0

OKですが、私のプロジェクトでは3つのクラスを持つ3つのクラスがあります。4番目のクラスと4番目のクラスで、ユーザーからの入力に応じて3つのクラスに3つのクラスがあります。 –

1

あなたはこれを意味しましたか?

Class c = Class.forName("java.lang.String"); 
関連する問題