/ / Czy możliwe jest ominięcie konstruktorów podczas tworzenia instancji obiektów w Androidzie - android, konstruktor, instancja obiektu

Czy możliwe jest ominięcie konstruktorów podczas tworzenia instancji obiektów w Androidzie - android, konstruktor, objectinstantiation

Czy Android ma sposób na tworzenie instancji obiektów bez wywoływania żadnego z jego konstruktorów?

W Javie Sun ma sun.reflect.ReflectionFactory.getReflectionFactory (). newConstructorForSerialization (), w .Net mamy System.Runtime.Serialization.FormatterServices.GetUninitializedObject () ale nie mogłem znaleźć czegoś takiego na platformie Android.

Odpowiedzi:

5 dla odpowiedzi № 1

Po przeanalizowaniu kodu źródłowego Androida znaleźliśmy sposób na osiągnięcie tego celu za pomocą metody statycznej 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);

}

2 dla odpowiedzi nr 2

Możesz to zrobić z natywnego kodu za pomocą funkcji JNI AllocObject. Widzieć specyfikacja JNI. Wywołanie kodu rodzimego będzie droższe niż wywołanie konstruktora no-op, ale prawdopodobnie tańsze niż wywołanie konstruktora, który zgłasza wyjątek.

Nie wiem, czy istnieje inny sposób, aby to zrobić. Nic mnie nie wyskakuje.


0 dla odpowiedzi № 3

Nie sądzę, jednak platforma Android zawiera API Java Reflection API java.lang.reflect.* więc wszystko, co jest możliwe przy użyciu Java Reflection API, jest możliwe w Androidzie