Что подразумевается под параметризованным типом?
Эта ссылка содержит следующее:
Создание типичного типа с аргументами фактического типа называется параметризованным типом. Пример (параметризованного типа):
Collection<String> coll = new LinkedList<String>();
Итак, что такое параметризованный тип?
-
Collection<String>
или
-
LinkedList<String>
Ответы
Ответ 1
Они оба являются параметризованными типами: типы, которые принимают другие типы в качестве параметров.
Тот факт, что у вас разные типы с обеих сторон выражения, не имеет значения и имеет отношение к полиморфному поведению, т.е. поскольку LinkedList
является подтипом Collection
.
Ответ 2
Параметрированный тип обычно представляет собой класс, который имеет дело с другим объектом без интересного, какой он тип. Тип может быть определен с использованием символического "имени", а затем передается при создании экземпляра класса.
Например:
class MyClass<T> {
private T obj;
public MyClass<T>(T obj) {
this.obj = obj;
}
public int getId() {
return obj.hashCode();
}
}
В приведенном выше примере MyClass
обертывает объект любого типа и выполняет его метод hashCode()
, используя тот факт, что этот метод всегда существует.
Вот как этот класс используется:
int sid = new MyClass<String>("aaaa").hashCode();
Обратите внимание, что вы не можете сказать new MyClass<String>(123)
: тот факт, что объект создан с параметром String
, диктует тип аргумента конструктора.
Возвращаясь к вашему примеру, Collection<String>
означает "сбор строк". Это означает, что вы не можете добавить в этот объект объект другого типа.
Ответ 3
Кажется, что общий тип и параметризованный тип являются синонимами. Но, кажется, не имеет права вызывать, например, Box<Integer>
общий тип, поскольку в смысле слова, не являющегося общим. Итак, возможно:
Общий тип - это объявление с формальным параметром типа /s
class Box<T> { .. }
Box<T>
является общим типом
Параметрированный тип - это объявление с фактическим аргументом типа /s
Box<Integer> b;
Box<Integer>
является параметризованным типом
Необработанный тип - это объявление общего типа без фактического аргумента типа /s.
class Box<T> { .. }
Box b;
Box
является сырым типом
Ответ 4
Оба использования коллекции
Collection<String>
LinkedList<String>
являются параметризованными типами, причем String
является используемым типом.
Ответ 5
ParameterizedType представляет собой параметризованный тип, например Collection.
Параметрированный тип создается в первый раз, когда требуется рефлексивный метод, как указано в этом пакете. Когда создается параметризованный тип p, объявление общего типа, которое создает p, разрешается, и все аргументы типа p создаются рекурсивно. Дополнительную информацию о процессе создания переменных типа см. В разделе ТипVariable. Повторное создание параметризованного типа не влияет.
Экземпляры классов, реализующих этот интерфейс, должны реализовать метод equals(), который приравнивает любые два экземпляра, которые используют одно и то же объявление общего типа и имеют одинаковые параметры типа.