Дженерики Java являются главным образом способом вызвать статический тип на элементах набора?

В Javascript, когда вы получаете первый элемент массива массивов с нотацией [0], он возвращает массив, так что вы просто снова используете [] с нужным индексом.

result.resultSets[0].rowSet[0][26]
5
задан Harry Quince 19 April 2009 в 23:40
поделиться

8 ответов

Да, это в основном все. Прежде чем генерики, нужно было создать ArrayList объектов. Это означало, что можно добавить любой тип типа Object в список - даже если вы только хотели, чтобы ArrayList содержал Strings.

Все универсальные шаблоны - это добавление безопасности типов. То есть теперь JVM будет проверять, что любой объект в списке является строкой, и не позволит вам добавить объект, не являющийся строкой, в список. Еще лучше: эта проверка выполняется во время компиляции.

1
ответ дан 13 December 2019 в 05:42
поделиться

Это далеко не только только использование дженериков, но это, безусловно, самый заметный.

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

Я просто хотел бы упомянуть об этом, потому что вы встретите места, где обобщения могут быть полезны , но если вы застряли в ассоциации дженериков / коллекций, вы можете упустить этот факт.

8
ответ дан 13 December 2019 в 05:42
поделиться

Да. Для обеспечения безопасности типов и удаления приведений во время выполнения правильный ответ.

1
ответ дан 13 December 2019 в 05:42
поделиться

Да, ваше понимание верно. Коллекция строго типизирована к любому указанному типу, что имеет различные преимущества, в том числе больше не приведение во время выполнения.

2
ответ дан 13 December 2019 в 05:42
поделиться

Вы можете ознакомиться с руководством на сайте Java . Это дает хорошее объяснение во введении.

Без Обобщения:

List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next();  // 3

С Обобщением

List<Integer> myIntList = new LinkedList<Integer>(); // 1'
myIntList.add(new Integer(0)); // 2'
Integer x = myIntList.iterator().next(); // 3'

Я думаю, что это как безопасность типов, а также сохранение приведения. Узнайте больше об autoboxing .

0
ответ дан 13 December 2019 в 05:42
поделиться

Вы можете добавить проверки во время выполнения с помощью служебного класса Collections.

http://java.sun.com/javase/6/docs/api/java/util/Collections.html#checkedCollection (java.util.Collection,% 20java.lang.Class)

Также смотрите проверил установленный, проверенный список, проверенный отсортированный набор, проверенная карта,

0
ответ дан 13 December 2019 в 05:42
поделиться

Да, вы правы. Generics добавляет безопасность типа времени компиляции в вашу программу, что означает, что компилятор может обнаружить, если вы помещаете неправильный тип объектов, например, в ваш ArrayList .

Я хотел бы отметить одну вещь: хотя он удаляет видимое приведение во время выполнения и снимает загромождение исходного кода, JVM по-прежнему выполняет приведение в фоновом режиме.

Способ, которым Generics реализован в Java, просто скрывает приведение и по-прежнему генерирует неуниверсальный байт-код. ArrayList по-прежнему является ArrayList объектов в байт-коде. Хорошая вещь об этом - то, что он поддерживает байт-код совместимым с более ранними версиями. Плохо то, что это упускает огромную возможность оптимизации.

0
ответ дан 13 December 2019 в 05:42
поделиться

Вы можете использовать универсальный в любом месте, где вам нужен параметр типа , то есть тип, который должен быть то же самое в некотором коде, но остается более или менее неопределенным.

Например, один из моих игрушечных проектов - написание общих алгоритмов для компьютерной алгебры в Java. Это интересно как для математических алгоритмов, так и для того, чтобы подвергать дженерики Java через стресс-тест.

В этом проекте я получил различные интерфейсы для алгебраических структур, таких как кольца и поля и их соответствующие элементы, и конкретных классов. Например, для целых чисел или для многочленов над кольцом, где кольцо является параметром типа. Это работает, но местами становится несколько утомительно. До сих пор запись представляет собой тип перед переменной, который занимает две полные строки по 80 символов, в алгоритме проверки неприводимости полиномов. Главный виновник в том, что вы не можете дать сложному типу собственное имя.

0
ответ дан 13 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

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