泛型的使用

简介: 泛型的使用

一、前言

1.什么是泛型

       泛型(Generics)是一种编程语言特性,用于支持类型参数化。具体而言,它允许用户在定义类、接口和方法时使用一个或多个类型参数,这些参数表示一种或多种类型而非具体的类型。在使用泛型时,可以使用任何符合泛型约束的类型作为类型参数,使得代码重用性更高,更安全,更可读。泛型在许多现代编程语言中得到广泛的支持和应用

2.为什么要使用

早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题,这样程序就不太安全,有了泛型以后。

1.代码更加简洁【不用强制转换】

2.程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】

3.可读性和稳定性【在编写集合的时候,就限定了类型】

二、泛型的使用场景

1.泛型容器类

使用List、Map等数据结构,通过泛型,可以使用不同类型的元素进行存储和操作,并且使用泛型可以将运行时异常转换为编译期异常。

没有泛型规定容器

List list=new ArrayList();
  list.add(1);
  list.add(2);
  list.add(3);
  list.add(4);
  list.add("c");
  for (Object objects : list) {
    int num=(int) objects;
    if(num%2==1) {
      System.out.println(num);
    }
  }

打印结果:编译期没有异常,运行异常

泛型规定容器后

可以帮我们解决编译期的错误,尽早的发现问题。

2.泛型接口类

        在做项目的时候,不管是业务逻辑层还是数据访问层,我们定义用于增删改查的所有方法,存在大量冗余的代码。因此为了使我们的项目更为简洁,易于维护,泛型接口就派上用场了。

           我们要泛化一个具体接口为通用接口,按规定来说,接口的名称不能包含具体某个类型的名称,例如“UserDao、OrderDao...”都是不符合约定的,而是一个更为通用的名称“CommonDao,IBaseDao,....”这些就符合大众的约定俗成的名称。

下面我们来模拟优化一下冗余的代码。

package xw;
public class UserDao {
  public int add(User user) {
    return 0;
  }
  public int del(User user) {
    return 0;
  }
  public int Update(User user) {
    return 0;
  }
}

我们用一个通用BaseDao来优化

package xw;
/**通用basedao
 * @author 索隆
 *
 * @param <T>
 */
public class BaseDao<T> {
  public int add(T t) {
    return 0;
  }
  public int del(T t) {
    return 0;
  }
  public int Update(T t) {
    return 0;
  }
}
class UserDao extends BaseDao<User>{
  public int add(User user) {
    return 0;
  }
  public int del(User user) {
    return 0;
  }
  public int Update(User user) {
    return 0;
  }
}

我们写一BaseDao用泛型规定,谁要调用传个类进来,就可以对该类进行增删改查的操作,不但少写了很多的代码,还增强了拓展性,泛型类或泛型方法可以适用于不同的数据类型,使数据访问层更加灵活,可以方便地拓展到未来新增的数据类型上。

3.泛型方法

package xw;
import java.util.Arrays;
public class Test03 {
    // 定义泛型方法contains,使用类型参数T来指定数组元素类型
    public static <T> boolean contains(T[] arr, T target) {
      for (T element : arr) {
        if (element.equals(target)) {
          return true;
        }
      }
      return false;
    }
    // 测试泛型方法
    public static void main(String[] args) {
      String[] names = {"John", "Mary", "Bob", "Alice"};
      System.out.println(Arrays.toString(names));
      System.out.println("Contains \"Bob\"? " + Test03.<String>contains(names, "Bob"));
      System.out.println("Contains \"Jack\"? " + Test03.<String>contains(names, "Jack"));
    }
  }

泛型限定方法的好处在于可以增加代码的复用性和类型安全性。

在泛型规定方法中,可以通过添加限制条件,只允许特定类型的数据作为方法参数,这样能够确保代码的类型安全性。

看到这里,这篇关于泛型的分享就结束了。

相关文章
|
4月前
|
安全 算法 Java
深入理解泛型
深入理解泛型
|
1天前
|
Java 编译器 语音技术
|
4月前
|
存储 安全 Java
这还是你认识的泛型吗???!
这还是你认识的泛型吗???!
34 0
|
4月前
|
存储 Java
什么是泛型, 泛型的具体使用?
什么是泛型, 泛型的具体使用?
|
8月前
|
存储 安全 Java
泛型的相关知识
泛型的相关知识
69 0
|
9月前
|
编译器 C#
C# 泛型
C# 泛型
39 0
|
10月前
|
存储 C#
【C#】什么是泛型?
泛型是C#编程中一个非常重要的概念,它能够编写更加通用、灵活和可重用的代码,能够编写可以在不同类型之间工作的代码,同时还可以提高代码的效率和可维护性。在本文中,我们将探讨泛型及其在C#编程中的应用。
67 0
|
安全 Java 编译器
你了解泛型吗?
面向对象编程中,多态算是一种泛化机制。你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性。此外,如果将方法参数声明为接口,将会更加灵活。
|
安全 Java 编译器
第10章 泛型
泛型是什么,以及泛型怎么用。
96 0
|
算法 安全 Java