6

Android には、コンストラクターを呼び出さずにオブジェクトをインスタンス化する方法がありますか?

Java では、Sun にはsun.reflect.ReflectionFactory.getReflectionFactory().newConstructorForSerialization()があり、.Net にはSystem.Runtime.Serialization.FormatterServices.GetUninitializedObject()がありますが、Android プラットフォームではそのようなものを見つけることができませんでした。

4

4 に答える 4

5

Android ソース コードを調べた結果、ObjectInputStream#newInstance() 静的メソッドを使用してこれを実現する方法を見つけました。

private Object newInstanceSkippingConstructor(final Class clazz) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException,     InvocationTargetException {

    Method newInstance = ObjectInputStream.class.getDeclaredMethod("newInstance", Class.class, Class.class);
    newInstance.setAccessible(true);
    return newInstance.invoke(null, clazz, Object.class);

}
于 2010-08-10T11:26:28.060 に答える
2

これは、JNI AllocObject 関数を使用してネイティブ コードから実行できます。JNI 仕様を参照してください。ネイティブ コードの呼び出しは、no-op コンストラクターを呼び出すよりもコストがかかりますが、例外をスローするコンストラクターを呼び出すよりもおそらく安価です。

それを行う別の方法があるかどうかはわかりません。私には何も飛び出していません。

于 2010-06-28T21:12:23.443 に答える
0

私はそうは思いませんが、AndroidプラットフォームにはJava Reflection APIが含まれているため、JavaReflectionAPIjava.lang.reflect.*を使用して可能なことはすべてAndroidで可能です。

于 2010-06-25T21:30:24.743 に答える