Ich habe eine Android-Anwendung (Java), die fein gearbeitet, wenn sie mit dem Android 1.6 SDK mit dem folgenden Code aus der android.provider.Contacts Klasse zusammengestellt:Ist dies eine Reflexion und in welchem Maße?
Uri baseUri = Contacts.Phones.CONTENT_FILTER_URL;
Wenn der 2.0 SDK herauskam, der Androide Die Klasse .provider.Contacts wurde abgeschrieben und durch android.provider.ContactsContract ersetzt. Um ein Programm zu erhalten sowohl auf 1,6 und 2,0 zu arbeiten, ich unter 1.6 mit folgenden Änderung zusammengestellt:
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) {
}
Da ich unter 1.6 wurde kompilieren, kann ich nicht importieren android.provider.ContactsContract da es ein Klasse nur bis 2.0 bekannt. Ist dies eine Reflexion und in welchem Maße?
Kommentar hinzugefügt: Nach dem Lesen des "Reflection" -Kapitels von "The Java Programming Language" (was ich zuerst hätte tun sollen), verstehe ich jetzt meistens, was man mit Reflektion tun kann, aber eine präzise Definition von Reflektion nicht leicht zu kommen. Ihre Antworten haben dazu beigetragen, zu verdeutlichen, was meine Frage ausgelöst hat: Sobald eine Klasse reflektiert wurde und eine Instanz der Klasse, die mit Reflektion erstellt wurde, können Sie so mit der Instanz interagieren, als ob die Klasse neu ist.
Hier ist mein dürftiger Versuch einer knappe Definition, die bei weitem nicht perfekt und ich bin sicher, ich muß zu überarbeiten, wie ich mehr lernen:
Reflexion ist die indirekte, dynamische Untersuchung, Manipulation oder Aufruf von Klassenobjekten Verwenden von Klassenobjekten, die in java.lang.reflect oder den Class- oder Package-Klassen enthalten sind und die zunächst den Zugriff auf die Klasse mithilfe eines vollständig qualifizierten Zeichenfolgennamens erfordern.
Beachten Sie, dass auch wenn die URI in 2.0 ist veraltet, Die Funktionalität sollte noch eine Weile im Framework bestehen (obwohl Android manchmal eine eigene Interpretation des Wortes "deprecated" hat). –
Sie haben Recht, dass es immer noch existiert, außer dass die Funktionalität unter 2.0 nicht funktioniert. Der angeforderte Kontakt wird nicht zurückgenommen.Ich kann mich nicht erinnern, ob es jedes Mal Kontakt oder den Kontakt "Meine Kontaktkarte" zurückgibt. – fupsduck
Anstelle des oben genannten Codes und mit einer ClassNotFound-Ausnahme können Sie proaktiv überprüfen, welche Edition von Android-Code durch eine Umgebungseigenschaft ausgeführt wird, und dann eine Unterfunktion aufrufen, die ein BaseURI zurückgibt –