私が知る限り、私がやっていること(Title)は不可能です。 しかし、ここにはコードの3つの小さなサンプルがあります - 最初のものは私が現在持っているもの、2番目は私が望むもの、3番目は達成するための方法です。反射へ。 2番目の例に近づくようにコードを再構築する方法があるのだろうかと思います。 いくつかの前提があります。ここで使用される各クラスはコンストラクタが1つしかなく、必要なオブジェクトを正確に認識しています。 Object []は、私が実行時にすべてを知っていないためです。リフレクションを使用しないクラスオブジェクトのインスタンス化
Object o; Object[] params; String myString;
switch(myString){
case "ClassA": o = new ClassA(params);
case "ClassB": o = new ClassB(params);
//ETC
}
Object o; Object[] params; String myString;
HashMap<String, Class<?>> map;
o = new map.get(myString)(params); //Obviously doesnt work
Object o; Object[] params; String myString;
HashMap<String, Class<?>> map;
o = map.get(myString).getConstructors()[0].newInstance(params);
Iは実際に上記の嘘注意。私が今持っているのは1
ではなく、3
です。私はすべてのクラス名をハードコードできないので、1
を持つことはできません。私は2
を持っていたいと思います。助言がありますか?
いくつかの明確化:
例でのHashMap 2
と3
は、クラス名の文字列表現、および実際のクラスのオブジェクトのペアを含みます。
また、実行時に(明らかに)埋められます。つまり、上のコードを実行する前にインスタンス化する可能性のあるすべてのクラスを知っていることを意味しますが、それらをハードコードすることはできません。 。
なぜあなたはそれを望みますか? 'map'には何がありますか? –
反射ではなく反射を使用せずにインスタンシエートすることは複雑です。 – davidxxx
すべてのクラス名をハードコーディングできない場合は、 '2 'を指定することはできません。また、すべての文字列をどこから取得する必要がありますか?または、それは誤解であり、おそらく使用されるすべてのクラス(ClassA、ClassB ...)について、コードのある時点で知っていますか? –