Исходный код apache-commons colectionutils

Следующий фрагмент кода был взят из файла CollectionUtils.java платформы Commons:

private static class CardinalityHelper<O> {
    final Map<O, Integer> cardinalityA, cardinalityB;

    public CardinalityHelper(final Iterable<? extends O> a,
            final Iterable<? extends O> b) {
        cardinalityA = CollectionUtils.<O> getCardinalityMap(a);
        cardinalityB = CollectionUtils.<O> getCardinalityMap(b);
    }

    public final int max(final Object obj) {
        return Math.max(freqA(obj), freqB(obj));
    }

    public final int min(final Object obj) {
        return Math.min(freqA(obj), freqB(obj));
    }

    public int freqA(final Object obj) {
        return getFreq(obj, cardinalityA);
    }

    public int freqB(final Object obj) {
        return getFreq(obj, cardinalityB);
    }

    private final int getFreq(final Object obj,
            final Map<?, Integer> freqMap) {
        final Integer count = freqMap.get(obj);
        if (count != null) {
            return count.intValue();
        }
        return 0;
    }
}

getCardinalityMap возвращает <O> Map<O, Integer>Может кто-нибудь, пожалуйста, помогите мне понять

  1. что значит cardinalityA = CollectionUtils.<O> getCardinalityMap(a); средства? Это какой-то типизинг?
  2. Что возвращает тип <O> Map<O, Integer> средства?
  3. Как называется этот трюк?

Спасибо

1 ответ

Решение

1) что означает кардинальность A = CollectionUtils. getCardinalityMap(а); средства? Это какой-то типизинг?

Это не типотипирование. Это явная установка универсального параметра для универсального метода. CardinalityHelper имеет универсальный параметр <O> как вы можете видеть из декларации:

private static class CardinalityHelper<O> {

Это безопасный способ для клиентов CardinalityHelper использовать этот класс.

2) Что возвращает тип <O> Map<O, Integer> средства?

объявление общего параметра.Карта - тип возврата.

3) Как называется этот трюк?

Он использует общие методы Java.

Вы также можете найти симулированное использование в стандартной библиотеке JDK. Например: java.util.Collections.sort (java.util.List)

Реализация принципов метапрограммирования в Java очень ограничена, поэтому вы можете использовать только параметры Generic Type для создания типовобезопасных контейнеров, что требуется для строго типизированной природы Java.

Другие вопросы по тегам