0

オブジェクトを動的に作成したい場合は、次のコードを使用します。

// Object technical name is xxxx.objectname

String[] ObjectNameArray;   
ObjectNameArray = ObjectName.split(".");

// if the objectname is for exaple deleteme Java should intrpet the code
// as follows deleteme DeletebleObject = new deleteme(getContext());

ObjectNameArray[1] DeletebleObject = new ObjectNameArray[1](getContext());

これは可能ですか?どうすればこれを達成できますか?

事前にt​​hx。

4

7 に答える 7

0

ここでジェネリックを使用できると思います...例:

    MyClass <T extends Object>

次に、ワイルドカードを使用して、タイプを気にせずにそれらにアクセスできます。

    MyClass<?> myClass;
于 2013-02-13T08:39:56.943 に答える
0

リフレクションパッケージとClassクラスを見てください。既存のクラス定義からオブジェクトを作成するメソッドがあります。

Object o =  Class.forName(ObjectNameArray[1]).newInstance(); 

newInstance()から

このClassオブジェクトによって表されるクラスの新しいインスタンスを作成します。クラスは、空の引数リストを持つ新しい式のようにインスタンス化されます。クラスがまだ初期化されていない場合、クラスは初期化されます。このメソッドは、チェックされた例外を含め、nullaryコンストラクターによってスローされたすべての例外を伝播することに注意してください。このメソッドを使用すると、コンパイラによって実行されるコンパイル時の例外チェックが効果的にバイパスされます。Constructor.newInstanceメソッドは、コンストラクターによってスローされた例外を(チェックされた)InvocationTargetExceptionでラップすることにより、この問題を回避します。

于 2013-02-13T08:40:28.247 に答える
0

ファクトリデザインパターンを使用して、名前を送信することにより、さまざまなタイプの動的オブジェクトを作成できます。

Refference Link FactoryDe​​singPatternの場合

于 2013-02-13T08:40:56.780 に答える
0

動的オブジェクトを作成するには、クラス ファイルのリストを記述する必要があります。私がすることは、クラス名をキーとして保持し、オブジェクトを値として保持する Map を作成することです。彼らはマップを呼び出してオブジェクトを取得します。

于 2013-02-13T08:34:26.973 に答える
0

おそらく、Javaの「リフレクション」メカニズムを見て、必要なオブジェクト/メソッドを動的に作成/呼び出す必要があります。次の例を参照してください。

// - specifies which class (className) is to be loaded (e.g.: com.example.objectname)
Class<?> loca = Class.forName(className);
// - specifies method (methodName) to be used (e.g.: getContext)
// - assumes the method returns a "String" (String.class)
Method method = loca.getMethod(methodName, new Class[]{String.class});
// - creates a new instance of the class, i.e., an object
Object obj = loca.newInstance();
// - call the actual method in the function
String result = (String) method.invoke(obj, inputParameters);

それが役に立てば幸い。

于 2013-02-13T08:46:22.127 に答える
0

Java リフレクション経由:

    String[] objectNameArray;   
    objectNameArray = objectName.split(".");

    try {
        Class<?> clazz = Class.forName(objectNameArray[1]);
        Object context = getContext();
        Constructor<?> constructor = clazz.getConstructor( context.getClass() );
        Object instance = constructor.newInstance( context );

    } catch( ClassNotFoundException e ) {
        e.printStackTrace();
    } catch( SecurityException e ) {
        e.printStackTrace();
    } catch( NoSuchMethodException e ) {
        e.printStackTrace();
    } catch( IllegalArgumentException e ) {
        e.printStackTrace();
    } catch( InstantiationException e ) {
        e.printStackTrace();
    } catch( IllegalAccessException e ) {
        e.printStackTrace();
    } catch( InvocationTargetException e ) {
        e.printStackTrace();
    }
于 2013-02-13T08:48:52.207 に答える
0
  1. 命名規則が逆になっています。
  2. それがあなたの意図したものかどうかはわかりませんが、次を使用してその名前からクラスインスタンスを取得できます。

    Class.forName("deleteMe").newInstance();

クラスに空のコンストラクターがあると仮定します。パラメータ化されたコンストラクタを使用する場合:

Class.forName("deleteMe").getConstructor(...).newInstance(...); 
于 2013-02-13T08:37:34.773 に答える