Различие между перечислением Java и итератором

Самое простое решение, которое я могу придумать, которое не требует создания собственного модуля (или изменения существующего), состоит в том, чтобы передать этот параметр в качестве свойства реагирующего компонента.

В вашем AppDelegate, где инициализируется RCTRootView, вы проверяете, является ли это симулятором, как если бы вы делали это в обычном приложении для iOS; Затем вы передаете эту информацию в корневое представление реагирования в виде initialProperties:

  BOOL isSimulator = NO;
#if TARGET_IPHONE_SIMULATOR
  isSimulator = YES;
#endif

  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"ReactDemo"
                                               initialProperties:@{@"isSimulator": @(isSimulator)}
                                                   launchOptions:launchOptions];

Теперь вы можете получить к ней доступ в JavaScript через реквизиты вашего компонента реакции:

this.props.isSimulator

В Android у вас MainActivity, который расширяет ReactActivity, вы можете использовать аналогичный подход:

public boolean isEmulator() {
        return Build.FINGERPRINT.startsWith("generic")
                || Build.FINGERPRINT.startsWith("unknown")
                || Build.MODEL.contains("google_sdk")
                || Build.MODEL.contains("Emulator")
                || Build.MODEL.contains("Android SDK built for x86")
                || Build.MANUFACTURER.contains("Genymotion")
                || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
                || "google_sdk".equals(Build.PRODUCT);
    }

@Override
protected Bundle getLaunchOptions() {
    Bundle opts = new Bundle();
    opts.putBoolean("isEmulator", isEmulator());
    return opts;
}
115
задан Maarten Bodewes 24 July 2012 в 16:00
поделиться

3 ответа

Глядя на спецификацию Java API для Итератора интерфейса, есть объяснение различий между Enumeration :

Итераторы отличаются от перечисления двумя способами:

  • Итераторы позволяют вызывающей стороне удалять элементы из нижележащих коллекция во время итерации с четко определенная семантика.
  • Имена методов были улучшены.

Суть в том, что оба Enumeration и Iterator дадут последовательные элементы, но Iterator ] улучшен таким образом, что имена методов короче, и имеется дополнительный метод remove . Вот параллельное сравнение:

  Enumeration                     Iterator
  ----------------                ----------------
  hasMoreElement()                hasNext()
  nextElement()                   next()
  N/A                             remove()

Как также упоминается в Спецификациях Java API, для новых программ Iterator должен быть предпочтительнее, чем Enumeration , поскольку «Iterator принимает место Enumeration в структуре коллекций Java ". (Из спецификации Iterator .)

140
ответ дан 24 November 2019 в 02:26
поделиться

«Официально» они должны быть аналогичны интерфейсу итератора, поддерживающему дополнительные операции (например, удаление). Обычно используется итераторы.

Вот из javadocs интерфейса перечисления :

ПРИМЕЧАНИЕ. Функциональность этого интерфейса дублируется Интерфейс итератора. К тому же, Итератор добавляет необязательное удаление операция и имеет более короткий метод имена. Новые реализации должны рассмотрите возможность использования Iterator в предпочтении в Enumeration.

11
ответ дан 24 November 2019 в 02:26
поделиться

Если вы пишете свой собственный класс коллекции и расширяете любой из существующих классов или реализуете любой из интерфейсов платформы Collections, у вас в основном нет другого выбора, кроме как использовать Iterator.

Если по какой-то причине (которую я не могу придумать) вы создаете собственный класс коллекции, который никак не связан с java.util.Collection или java.util.Map, вам следует по-прежнему реализует Iterable, чтобы люди могли использовать ваш класс в циклах for.

2
ответ дан 24 November 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: