java基础(八)泛型

        本文主要介绍的java基础中的泛型的相关知识,包括泛型的介绍和用法 。   

一、什么是泛型

        泛型泛指一切类型,能够代表一切类型,是一种在编程中广泛使用的概念,特别是在面向对象编程中。它允许在编写代码时使用类型参数,这些参数在代码被实际使用时才会被具体的类型所替换。简单来说,泛型就是将类型参数化,使得一个类或方法能够操作多种数据类型,而不仅仅是预先定义好的一种或几种类型。

        泛型的本质是参数化类型,也就是所操作的数据类型被指定为一个参数。

二、为什么引用泛型

        1、先通过实现一个栈(先进后出)了解什么是泛型和调用泛型的原因。

        例:流程图

        创建一个int数组,定义一个游标i,定义数组大小,编写添加数据和输出数据的方法。但此时只能存储int类型数据,如果向存储其他类型数据,可以重现创建一个类修改数据类型,但太过繁琐,所以引入泛型,泛指一切类型,能够代表一切类型,将其他数据类型进行转换。

        使用泛型后。

三、如何用泛型

        1、泛型类

        泛型类就是在类定义时通过类型参数指定类中某些属性的类型。

        定义语法:

        在类后边加< 具体类型名>

        在变量名前加 泛型类型名

        格式:

class 类名称 <泛型标识、泛型标识,...> {
    private 泛型标识 变量名;
    ......
}

        举例:

public class Box<T> {  
    // T stands for "Type"  
    private T t;  
  
    public void set(T t) { this.t = t; }  
    public T get() { return t; }  
}  
  
// 使用泛型类  
Box<Integer> integerBox = new Box<>();  
integerBox.set(123);  
Integer number = integerBox.get();  
  
Box<String> stringBox = new Box<>();  
stringBox.set("Hello World");  
String str = stringBox.get();

        使用语法

类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();

        java 1.7以后,后边的<>中具体的数据类型可以省略不写

类名<具体的数据类型> 对象名 = new 类名<>();

   2、泛型方法

        泛型方法是在调用方法时指定类型参数的方法。

        举例:

public class Util {  
    // 泛型方法 printArray  
    public static < E > void printArray( E[] inputArray ) {  
        // 显示数组元素  
        for ( E element : inputArray ){  
            System.out.printf( "%s ", element );  
        }  
        System.out.println();  
    }  
}  
  
// 使用泛型方法  
Integer[] intArray = { 1, 2, 3, 4, 5 };  
Util.printArray( intArray  );  
  
String[] stringArray = { "Hello", "World" };  
Util.printArray( stringArray );

3、泛型接口

        使用语法

        泛型接口与泛型类类似,只是它定义了一个或多个类型参数作为接口的一部分。

public interface 接口名<类型参数> {
    ...
}

          举例:

public interface Pair<K, V> {  
    public K getKey();  
    public V getValue();  
}  
  
// 实现泛型接口  
class OrderedPair<K, V> implements Pair<K, V> {  
    private K key;  
    private V value;  
  
    public OrderedPair(K key, V value) {  
        this.key = key;  
        this.value = value;  
    }  
  
    @Override  
    public K getKey() { return key; }  
  
    @Override  
    public V getValue() { return value; }  
}  
  
// 使用泛型接口  
Pair<String, Integer> p = new OrderedPair<>("Even", 8);

4、类型通配符

        类型通配符(Wildcard Types)主要用于提高代码的灵活性。

  • ? 表示未知类型。
  • ? extends T 表示未知的类型,它是T的子类或T本身。
  • ? super T 表示未知的类型,它是T的父类或T本身。
List<?> wildcardList = new ArrayList<String>();  
  
List<? extends Number> numList = new ArrayList<Integer>();  
// numList.add(new Integer(10)); // 编译错误  
  
List<? super Integer> intSuperList = new ArrayList<Number>();  
intSuperList.add(new Integer(10)); // 正确

     

5、 泛型限制

        泛型类、接口和方法可以有类型限制,以确保类型安全。

public class Pair<K extends Comparable<K>, V> {  
    // 类实现  
}

        在上面的例子中,K 必须是实现了 Comparable<K> 接口的类型。

总结

        泛型是Java中一种非常强大的特性,它提供了编译时期的类型检查,增加了代码的复用性和安全性。理解并熟练使用泛型,对于编写高质量的Java代码至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值