У меня есть приложение Android (java), которое работало нормально при компиляции с Android 1.6 SDK, используя следующий код из класса android.provider.Contacts:
Uri baseUri = Contacts.Phones.CONTENT_FILTER_URL;
Когда вышел 2.0 SDK, класс android.provider.Contacts был устарел и заменен на android.provider.ContactsContract. Чтобы заставить одну программу работать как на 1.6, так и на 2.0, я собрал версию 1.6 со следующим изменением:
Uri baseUri = Contacts.Phones.CONTENT_FILTER_URL;
…
try {
Class<?> c = Class.forName("android.provider.ContactsContract$PhoneLookup");
baseUri = (Uri) c.getField("CONTENT_FILTER_URI").get(baseUri);
}
catch (Exception e) {
}
Поскольку я компилировал под 1.6, я не мог импортировать android.provider.ContactsContract, так как это класс, известный только для 2.0. Считается ли это отражением и в какой степени?
Добавлен комментарий: После прочтения главы «Отражение» в «Языке программирования Java» (что я должен был сделать в первую очередь), я теперь в основном понимаю, что вы можете сделать с помощью отражения, но краткое определение отражение не легко найти. Ваши ответы помогли прояснить, что вызвало мой вопрос - что после того, как класс был отражен, и экземпляр класса создан с использованием отражения, вы можете взаимодействовать с экземпляром, как если бы класс был новым.
Вот моя скудная попытка получить краткое определение, которое далеко от совершенства, и я уверен, что мне нужно будет пересмотреть, когда я узнаю больше:
Отражение - это косвенный, динамический запрос, манипулирование или вызов объектов класса с использованием объектов класса, содержащихся в java.lang.reflect, или классов Class или Package, которые требуют первоначального доступа к классу с использованием полного имени строки.