在delphi Tokyo源代码中,我看到这两种不同的方式来检索“服务经理”
var FLocationManager: JLocationManager;
FLocationManager := TJLocationManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE));
and :
var FNotificationManager: JNotificationManager;
var NotificationServiceNative: JObject;
NotificationServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE);
FNotificationManager := TJNotificationManager.Wrap((NotificationServiceNative as ILocalObject).GetObjectID);
这两种方式到底有什么区别?为什么在第二种情况下他们会这样做(NotificationServiceNative作为 ILocalObject).GetObjectID而不是第一种情况?
将 Java 对象引用转换为ILocalObject
并提取其ObjectID
is the correct使用以下方法将对象引用转换为另一种对象类型Wrap()
.
然而,更短的方法also有效,因为Wrap()
有一个重载,它将 Java 对象引用作为输入并进行内部调用GetObjectID
然后Wrap()
's that.
所以,回答你的问题 - 没有真正的区别。两种方法都有效。
较长的代码可能只是旧版本 Delphi 的遗留物?我不记得是否Wrap()
过载一直存在。当然,在 Delphi 支持 Android 的早期,您总是必须获得ObjectID
手动。这Wrap()
重载可能是后来添加的,也许并非所有 FMX 代码都利用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)