gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:49:29 25 4
gpt4 key购买 nike

在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com