此链接声明如下:具有实际类型参数的泛型类型的示例化称为参数化类型。示例(参数化类型):Collection<String> coll = new LinkedList<String>();那么什么是参数化类型呢?
Collection<String> coll = new LinkedList<String>();
Collection<String>
LinkedList<String>
myss37ts1#
它们都是参数化类型:以其他类型作为参数的类型。在表达式的两端有不同类型的事实是不相关的,并且与多态行为有关,即因为LinkedList是Collection的子类型。
LinkedList
Collection
2sbarzqh2#
参数化类型通常是一个处理其他对象而不关心它是什么类型的类。类型可以用符号"name"定义,然后在创建类的示例时传递。例如:
class MyClass<T> { private T obj; public MyClass<T>(T obj) { this.obj = obj; } public int getId() { return obj.hashCode(); } }
在上面的例子中,MyClass Package 任何类型的对象,并执行其方法hashCode(),因为这个方法总是存在的。以下是此类的使用方法:int sid = new MyClass<String>("aaaa").hashCode();请注意,您不能说new MyClass<String>(123):对象是用参数String创建的这一事实规定了构造函数参数的类型。回到你的例子Collection<String>意味着"字符串集合",这意味着你不能向这个集合添加其他类型的对象。
MyClass
hashCode()
int sid = new MyClass<String>("aaaa").hashCode();
new MyClass<String>(123)
String
bjg7j2ky3#
泛型类型和参数化类型似乎是同义词,但是把Box<Integer>称为泛型类型似乎是不对的,因为在这个词的意义上不再是泛型了。泛型类型是具有形参的声明
Box<Integer>
class Box<T> { .. }
Box<T>是泛型类型参数化类型是具有实际类型参数的声明
Box<T>
Box<Integer> b;
Box<Integer>是参数化类型原始类型是没有实际类型参数的泛型类型声明。
class Box<T> { .. } Box b;
Box是原始类型
Box
2mbi3lxu4#
这里有一个快速分类的术语...
"<T>"
"<String>"
"List<T>"
"List<String>"
8yparm6h5#
收集的两种用途
Collection<String> LinkedList<String>
是参数化类型,String是使用的类型。
im9ewurl6#
即使这是一个相当古老的问题,我仍然认为我可以添加一些东西--特别是澄清术语“泛型类型”和“参数化类型”之间的区别,这在一开始在某种程度上让我感到困惑。从Java Docs Tutorial:我们称 generic type 为类型定义,例如:SomeType<T>,我们调用参数化类型到类型调用,例如:SomeType<SpecificType>(当我们提供特定的类作为type参数的参数时)。例如,List<T>是泛型类型,List<String>是参数化类型。
SomeType<T>
SomeType<SpecificType>
List<T>
List<String>
h9vpoimq7#
ParameterizedType表示参数化类型,如Collection。参数化类型是在反射方法第一次需要它时创建的,如此包中所指定。创建参数化类型p时,将解析p示例化的泛型类型声明,并递归创建p的所有类型参数。有关类型变量创建过程的详细信息,请参见TypeVariable。重复创建参数化类型无效。实现此接口的类的示例必须实现equals()方法,该方法使共享同一泛型类型声明并具有相等类型参数的任意两个示例相等。
7条答案
按热度按时间myss37ts1#
它们都是参数化类型:以其他类型作为参数的类型。
在表达式的两端有不同类型的事实是不相关的,并且与多态行为有关,即因为
LinkedList
是Collection
的子类型。2sbarzqh2#
参数化类型通常是一个处理其他对象而不关心它是什么类型的类。类型可以用符号"name"定义,然后在创建类的示例时传递。
例如:
在上面的例子中,
MyClass
Package 任何类型的对象,并执行其方法hashCode()
,因为这个方法总是存在的。以下是此类的使用方法:
int sid = new MyClass<String>("aaaa").hashCode();
请注意,您不能说
new MyClass<String>(123)
:对象是用参数String
创建的这一事实规定了构造函数参数的类型。回到你的例子
Collection<String>
意味着"字符串集合",这意味着你不能向这个集合添加其他类型的对象。bjg7j2ky3#
泛型类型和参数化类型似乎是同义词,但是把
Box<Integer>
称为泛型类型似乎是不对的,因为在这个词的意义上不再是泛型了。泛型类型是具有形参的声明
Box<T>
是泛型类型参数化类型是具有实际类型参数的声明
Box<Integer>
是参数化类型原始类型是没有实际类型参数的泛型类型声明。
Box
是原始类型2mbi3lxu4#
这里有一个快速分类的术语...
"<T>"
"<String>"
"List<T>"
"List<String>"
8yparm6h5#
收集的两种用途
是参数化类型,
String
是使用的类型。im9ewurl6#
即使这是一个相当古老的问题,我仍然认为我可以添加一些东西--特别是澄清术语“泛型类型”和“参数化类型”之间的区别,这在一开始在某种程度上让我感到困惑。
从Java Docs Tutorial:
我们称 generic type 为类型定义,例如:
SomeType<T>
,我们调用参数化类型到类型调用,例如:SomeType<SpecificType>
(当我们提供特定的类作为type参数的参数时)。例如,
List<T>
是泛型类型,List<String>
是参数化类型。h9vpoimq7#
ParameterizedType表示参数化类型,如Collection。
参数化类型是在反射方法第一次需要它时创建的,如此包中所指定。创建参数化类型p时,将解析p示例化的泛型类型声明,并递归创建p的所有类型参数。有关类型变量创建过程的详细信息,请参见TypeVariable。重复创建参数化类型无效。
实现此接口的类的示例必须实现equals()方法,该方法使共享同一泛型类型声明并具有相等类型参数的任意两个示例相等。