2012-09-23 1108 views
17

This下面的链接状态:参数化类型是什么意思?

泛型类型与实际类型参数的实例化被称为参数化类型。 例(参数化类型):

Collection<String> coll = new LinkedList<String>();

那么什么是参数化类型?

  • Collection<String>
  • LinkedList<String>
+5

怎么样在你给的链接阅读接下来的一句:“声明集合表示参数化类型,这是通用型系列的一个实例,其中地方持有人E已被混凝土类型String取代? –

+0

@JBNizet,是的,我的混淆源于实例化类型'LinkedList '。下面的评论为我澄清。 – wulfgarpro

回答

22

他们都是参数化类型:类型采取其他类型作为参数。

您在表达两边有不同类型的事实是不相关的,并且与多态行为有关,即因为LinkedListCollection的子类型。

1

收集

Collection<String> 
LinkedList<String> 

的两个用途是参数化类型在这里与String所使用的类型。

11

参数化类型通常是一个处理其他对象而不感兴趣的类是什么类型。类型可以使用符号“名称”来定义,然后在创建类的实例时传递。

例如:

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>的意思是“字符串的集合”。这意味着您不能将其他类型的对象添加到此集合中。

+0

如果你有一个其中T是字符串,那么你可以传递T的所有子类,是正确的吗? – Ungeheuer

+0

几乎正确。除了String是final类而不能扩展的事实。 – AlexR

+0

所以基本上任何泛型都是参数化类型,对吧? –

0

ParameterizedType表示参数化类型,如Collection。

参数化类型是在反射方法首次需要时创建的,如此包中所指定的。当创建一个参数化类型p时,p实例化的泛型类型声明被解析,并且p的所有类型参数都是递归创建的。有关类型变量创建过程的详细信息,请参阅TypeVariable。重复创建参数化类型不起作用。

实现此接口的类的实例必须实现equals()方法,该方法等同于共享相同泛型类型声明并具有相同类型参数的任何两个实例。

4

看来泛型类型和参数化类型是同义词。但似乎不正确的例子是Box<Integer>泛型,因为在这个词不通用的意义上。所以大概:

泛型类型与形式类型参数/声明小号

class Box<T> { .. } 

Box<T>是一个通用型

的参数化类型与实际类型参数的声明/ s的

Box<Integer> b;   

Box<Integer>是参数化类型

原始类型是不带实际类型参数/ s的泛型类型的声明。

class Box<T> { .. } 
Box b; 

Box是原始类型

相关问题