Какую цель делать (MyJobject as ILocalObject) .GetObjectID - PullRequest
0 голосов
/ 04 октября 2018

В исходном коде Delphi Tokyo я вижу этот 2 разных способа получения «Service Manager»

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 как ILocalObject) .GetObjectID , а не в первом случае?

1 Ответ

0 голосов
/ 04 октября 2018

Преобразование ссылки на объект Java в ILocalObject и извлечение его ObjectID - это правильный способ преобразования ссылки на объект в другой тип объекта с использованием Wrap().

Однако,более короткий способ также работает, потому что Wrap() имеет перегрузку, которая принимает ссылку на объект Java в качестве ввода и внутренне вызывает GetObjectID, а затем Wrap().

Итак, чтобы ответить на ваш вопрос - нет никакой разницы.Оба способа работают.

Более длинный код может быть просто перенесен из более старой версии Delphi?Я не помню, существовала ли перегрузка Wrap() всегда.Конечно, в первые дни поддержки Android в Delphi вам всегда приходилось получать ObjectID вручную.Перегрузка Wrap(), вероятно, была добавлена ​​позже, и, возможно, еще не весь код FMX использует ее.

...