У меня создается впечатление, что Android поддерживает рефлексию. Но действительно ли это? Насколько разумно было бы полагаться на размышления? Какое наказание?
Android и отражение
Ответ 1
Android поддерживает отражение.
Как только у вас запущен прототип, вы можете проверить и определить свои узкие места.
Если его отражение, то подумайте о попытке кэширования интерфейсов и т.д., чтобы сделать его разовой стоимостью, а не постоянно разрешать одни и те же интерфейсы из тех же экземпляров повторно.
Ответ 2
Он поддерживается и даже рекомендуется в ситуации, когда требуется совместимость с несколькими версиями ОС Android в одном файле apk
. В этой статье из официального блога разработчиков Android описано, как создать приложение, для которого требуется только некоторая ранняя версия API, и использует отражение для вызова новых API, если они доступны:
Ответ 3
простой пример, связанный с использованием отражения на android http://aaarkonusurum.blogspot.com/2012/02/android-ile-reflection.html
Class x = Object.class;
Constructor[] constructors = x.getDeclaredConstructors();
Field[] fields = x.getDeclaredFields();
Method[] methods = x.getDeclaredMethods();
for (Constructor constructor : constructors) {
//constructors
}
for (Field field : fields) {
//fields
}
for (Method method : methods) {
//methods
}
Создание TextView из кода во время выполнения с использованием отражения
String x = TextView.class.toString().replace("class ", "");
Class<?> cls = Class.forName(x);
Class<?> param[] = new Class[1];
param[0] = Context.class; //Context=o an ki context ==> [activity.class]
Constructor<?> ct = cls.getConstructor(param);
Object paramVal[] = new Object[1];
paramVal[0] = context;
Object retobj = ct.newInstance(paramVal);
Достижение метода setText() во время выполнения
Class methodParam[] = new Class[1];
methodParam[0] = java.lang.CharSequence.class;
Method method = cls.getMethod("setText", methodParam);
Object arglist[] = new Object[1];
arglist[0] = new String("THIS TEXTVIEW HAS BEEN CREATED ON RUN TIME");
method.invoke(retobj, arglist);
Ответ 4
В примерном коде есть хороший пример отражения, в BusinessCard. Этот метод не приведет к появлению кучи ожиданий, поэтому он должен быть гораздо более дружелюбным к производительности. Это также, на мой взгляд, проще реализовать. Особенно, если речь идет о ранее не реализованном методе.
Вот где он используется: http://developer.android.com/resources/samples/BusinessCard/src/com/example/android/businesscard/ContactAccessor.html
Ответ 5
Android, конечно, поддерживает Reflection, и мы можем читать методы другого класса APK или Framework. Вот статья об использовании Reflection в Android в качестве возможного подхода к созданию API- http://prasanta-paul.blogspot.kr/2013/09/java-reflection-as-android-api.html