参数化类型是什么意思?

时间:2012-09-23 10:46:11

标签: java generics

This链接指出以下内容:

  

具有实际类型参数的泛型类型的实例化称为参数化类型。   示例(参数化类型):

     

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

那么什么是参数化类型?

  • Collection<String>
  • LinkedList<String>

6 个答案:

答案 0 :(得分:32)

它们都是参数化类型:将其他类型作为参数的类型。

表达式两边有不同类型的事实是无关紧要的,并且与多态行为有关,即因为LinkedListCollection的子类型。

答案 1 :(得分:11)

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

例如:

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

答案 2 :(得分:6)

似乎泛型类型和参数化类型是同义词。但是,将Box<Integer>称为泛型类似乎是不对的,因为在非通用这个词的意义上。所以可能:

泛型类型是带有形式类型参数/ s

的声明
class Box<T> { .. }

Box<T>是通用类型

参数化类型是具有实际类型参数/ s

的声明
Box<Integer> b;        

Box<Integer>是参数化类型

原始类型是泛型类型的声明,没有实际类型参数/。

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

Box是原始类型

答案 3 :(得分:1)

收集的两种用途

Collection<String> 
LinkedList<String>

是参数化类型,String是使用的类型。

答案 4 :(得分:1)

这里是术语的快速分类...

  • 类型参数:只是占位符,即"<T>"
  • 类型参数:在声明"<String>"时传递给类型参数
  • 参数化类型(泛型):带有正式类型参数的类型,即"List<T>"
  • 参数化类型(具体):以声明的类型实参作为参数的类型,即"List<String>"

答案 5 :(得分:0)

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

参数化类型是在第一次被反射方法需要时创建的,如此包中指定的那样。创建参数化类型p时,将解析p实例化的泛型类型声明,并递归创建p的所有类型参数。有关类型变量创建过程的详细信息,请参阅TypeVariable。重复创建参数化类型无效。

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