泛型

简介: 泛型

泛型

定义:

泛型指得是“参数化的类型”。通俗来讲就是我们要传入一个变量a,但是a具体是什么类型我们暂不确定,就给它定义为一个泛型(成为类型形参),等到后面a类型确定再传入具体类型(成为类型实参)。

 

使用:

泛型的使用有三种场景:在类中的使用、在接口中的使用、在方法中的使用。

 

l 类中的使用:

// 定义一个泛类

public class ClassName<T>{

private T data;

public T getData() {

return data;

}

public void setData(T data) {

this.data = data;

}

}

l 接口中的使用:

public interface IntercaceName<T>{

T getData();

}

实现接口时,可以选择指定泛型类型,也可以选择不指定, 如下:

指定类型:

public class Interface1 implements IntercaceName<String> {

private String text;

  @Override

  public String getData() {

    return text;

  }

}

不指定类型:

public class Interface1<T> implements IntercaceName<T> {

private T data;

  @Override

  public T getData() {

    return data;

  }

}

l 在方法中的使用:

private static <T>返回类型 方法名(T a,T b){}

泛型的范围限定

泛型的范围限定指的是后面只能有指定的类型才能传入泛型中。

 

注意的是类名也可以作为一种类型

 

例如:private Express a;(Express为类)

 

在泛型范围的限制上有两种场合:

 

l 在类上限制类型:

interface Fruit{}

class Apple implements Fruit{}

class Plate<T extends Fruit>{

   T data;

}

Plate<Apple> p = new Plate<>();

第三行在泛型的限定中,无论是接口还是类统一使用extends

结果:这样限定的泛型T,只能是Fruit的子类。

l 在使用中限制类型:

这种限制就是使用关键字"?"泛型中的通配符;

<? extends Parent>指定泛类型的上界

Plate<? extends Fruit> p = new Plate<Apple>();

1指定了泛型只能为Fruit中的子类

泛型的作用:

1.提高代码的复用率。

2.泛型中的类型在使用时自动,不需要进行强转,使用更广泛。

泛型的注意事项:

在编译之后程序会采取去泛型化的措施。

也就是说Java中的泛型,只在编译阶段有效。

在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段

相关文章
|
存储 安全 Java
泛型的使用
泛型的使用
64 0
|
5月前
|
安全 编译器 Scala
何时需要指定泛型:Scala编程指南
本文是Scala编程指南,介绍了何时需要指定泛型类型参数。泛型提供代码重用和类型安全性,但在编译器无法推断类型、需要提高代码清晰度、调用泛型方法或创建泛型集合时,应明确指定类型参数。通过示例展示了泛型在避免类型错误和增强编译时检查方面的作用,强调了理解泛型使用时机对编写高效Scala代码的重要性。
38 1
何时需要指定泛型:Scala编程指南
|
5月前
什么是泛型,泛型的具体使用?
什么是泛型,泛型的具体使用?
27 0
|
5月前
|
存储 算法 容器
什么是泛型?
什么是泛型?
23 0
|
5月前
|
存储 Java
什么是泛型, 泛型的具体使用?
什么是泛型, 泛型的具体使用?
|
11月前
|
存储 算法 编译器
泛型的讲解
泛型的讲解
55 0
|
Java
泛型讲解
本章讲解了什么是泛型以及泛型擦除相关的知识点
80 1
|
存储 安全 Java
泛型的相关知识
泛型的相关知识
|
存储 Java 编译器
对泛型的认识
对泛型的认识
|
安全 Java 编译器
你了解泛型吗?
面向对象编程中,多态算是一种泛化机制。你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性。此外,如果将方法参数声明为接口,将会更加灵活。