泛型

泛型 属于 Java

11 个练习

关于 泛型

泛型类型就是参数化了类型的泛型类或接口。这样一来,编译器就能对类或接口强制实施类型安全。

看看下面这个非泛型的Container接口:

class Container {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

由于它接受并返回 Object 类型,所以能配合任何非基本类型使用。但这是有代价的:有些代码调用get时期望得到Integers,而另一些代码调用set时加入Strings,结果就会在运行时抛出异常。

泛型类和泛型接口的格式如下:

class ClassName<T1, T2, ..., Tn> { ... }
interface InterfaceName<T1, T2, ..., Tn> { ... }

类名或接口名后面有一节类型参数,用尖括号(<>)界定,用来指定类型参数(也叫类型变量)T1、T2、……和Tn。这些类型参数可以用在类或接口的内部,以获得泛型带来的类型安全。

下面是Container的泛型版本:

class Container<E> {
    private E object;

    public void set(E object) { this.object = object; }
    public E get() { return object; }
}

创建时,我们必须声明它保存的是哪种类型,编译器会强制实施这一约束:

// empty <> can infer from context
Container<String> stringContainer = new Container<>();
// compiler knows this is a String, so it is allowed
stringContainer.set("Some string");
// no cast needed, compiler knows it is a String
String result = stringContainer.get();
// this causes a compiler error:
stringContainer.set(42);
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 泛型