Какие преимущества дает указание типа для Collection <T>? - PullRequest
0 голосов
/ 23 февраля 2019

Для интерфейса Collection требуется тип ...

Какое преимущество имеет Collection<Int> над Collection<Any> (то же самое, но допускает все типы)?

1 Ответ

0 голосов
/ 23 февраля 2019

Collection<T> - это универсальный интерфейс.Общие классы позволяют программистам указывать с помощью одного объявления класса или интерфейса набор связанных типов.Java 1.5 и Kotlin поставлялись с Generics, и все интерфейсы и реализации коллекций активно их используют.

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

val collection: MutableCollection<Int> = mutableListOf()
collection.add("some string") // compile time error saying "Type mismatch"

Это позволит избежать ClassCastException во время выполнения, потому что вы получите ошибку при компиляции ( "Несоответствие типов" ),Кроме того, Generics делает код чистым, так как нам не нужно использовать приведение и оператор instanceof в Java или оператор as в Kotlin .Это означает, что если мы указываем явный тип, например MutableCollection<String>, нам не нужно приводить его при получении из коллекции:

val collection: MutableCollection<String> = mutableListOf()
collection.add("Some string")

val data: String = collection.elementAt(0) // don't need to cast to String

Если мы используем MutableCollection<Any>, нам нужны явные данные приведения:

val collection: MutableCollection<Any> = mutableListOf()
collection.add("Some string")

val data: String? = collection.elementAt(0) as? String // explicitly casting using `as` operator

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...