fup*_*uck 6 java reflection android
我有一个Android应用程序(java)使用Android 1.6 SDK使用android.provider.Contacts类中的以下代码编译时工作正常:
Uri baseUri = Contacts.Phones.CONTENT_FILTER_URL;
Run Code Online (Sandbox Code Playgroud)
当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) {
}
Run Code Online (Sandbox Code Playgroud)
由于我在1.6下编译,我无法导入android.provider.ContactsContract,因为它是一个只知道2.0的类.这被认为是反思和程度吗?
补充评论:在阅读了"Java编程语言"的"反思"章节后(我本来应该先做),我现在大部分都了解你可以用反射做些什么,但反思的简洁定义并不容易.你的答案有助于澄清是什么引发了我的问题 - 一旦反映了一个类,并且使用反射创建了一个类的实例,你就可以像实现类一样与实例进行交互.
这是我对简明定义的微薄尝试,这种定义远非完美,我相信我需要修改,因为我了解更多:
反射是使用java.lang.reflect中包含的类对象或需要使用完全限定的字符串名称初始访问类的Class或Package类对类对象进行间接,动态查询,操作或调用.
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |