这被认为是反思和程度吗?

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类对类对象进行间接,动态查询,操作或调用.

Dan*_*Lew 6

我相信这是Java反射的定义(更多关于Android反射的多版本兼容性).我不确定你的意思是"到什么程度"; 它只是.