delphi - 这样做的目的是什么(MyJobject as ILocalObject).GetObjectID

标签 delphi firemonkey

在delphi Tokyo源代码中,我看到这两种不同的方式来检索“服务管理器”

var FLocationManager: JLocationManager;
FLocationManager := TJLocationManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE));

和:

var FNotificationManager: JNotificationManager;
var NotificationServiceNative: JObject;
NotificationServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE);
FNotificationManager := TJNotificationManager.Wrap((NotificationServiceNative as ILocalObject).GetObjectID);

这两种方式到底有什么区别?为什么在第二种情况下他们这样做(NotificationServiceNative as ILocalObject).GetObjectID 而不是在第一种情况下?

最佳答案

将 Java 对象引用转换为 ILocalObject 并提取其 ObjectID 是将对象引用转换为另一种对象类型的正确方法,使用 Wrap().

但是,更短的方式也可以工作,因为 Wrap() 有一个重载,它将 Java 对象引用作为输入并在内部调用 GetObjectID 就可以了,然后 Wrap() 就可以了。

所以,回答你的问题 - 没有真正的区别。两种方法都有效。

较长的代码可能只是旧版本 Delphi 的遗留物?我不记得 Wrap() 重载是否始终存在。当然,在 Delphi 支持 Android 的早期,您总是必须手动获取 ObjectIDWrap() 重载可能是后来添加的,也许并非所有 FMX 代码都利用它。

关于delphi - 这样做的目的是什么(MyJobject as ILocalObject).GetObjectID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52645534/

相关文章:

delphi - 如何检测SQ​​L Server数据库中发生的任何修改?

windows - Delphi项目的自动化构建工具

ios - Delphi ios 在 ImageControl 中缩放位图

delphi - Firemonkey 中的 Canvas.Pixels[X,Y] 相当于什么?

ios - 如何在 Delphi FireMonkey iOS 应用程序中存储和播放媒体文件?

android - 如何编辑 Android.manifest.template.xml 文件以接收推送通知

delphi - 比较屏幕截图并获取第一个像素变化的屏幕坐标

delphi - 如何使用http更新datasnap Rest服务器中的文件?

delphi - 当鼠标不在FireMonkey应用程序上移动时,Delphi“虽然”性能下降

macos - Firemonkey OSX 下载过程中更新进度条