java泛型基础

java泛型基础目录 一 什么是泛型 二 泛型类的使用 2 1 泛型类的定义 2 2 泛型类的数组使用 三 泛型的上界 java 泛型基础 四 泛型的方法 五 泛型与集合 一 什么是泛型 当我们不确定数据类型时 我们可以暂时使用一个字母 T 代替数据类型 例如写一个方法 但是我们不知道它是传递的是什么数据类型 我们就可以使用泛型 到时候只要指明 T 是什么数据类型 就可以使用了 可以设想一下 typedef

大家好,我是讯享网,很高兴认识大家。



一.什么是泛型

当我们不确定数据类型时,我们可以暂时使用一个字母 T代替数据类型。例如写一个方法,但是我们不知道它是传递的是什么数据类型,我们就可以使用泛型,到时候只要指明T是什么数据类型,就可以使用了。可以设想一下typedef,而类和方法都有涉及到类。

二.泛型类的使用

2.1泛型类的定义

泛型类的语法格式:

第一种:class 泛型类名称<类型形参列表> {
// 这里可以使用类型参数
}
第二种: class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}

注:泛型只能接受类,所有的基本数据类型必须使用包装类!

代码实例:

如图,输出为10,我们定义了一个Text1的泛型类,当我们实例化泛型类时,定义了T为Integer包装类,那么所有T都为Integer,如果换为String类,那么所有的T都为String类,因此T可以代表任何数据类型,方便我们指定类型传参。

注:类名后的 <T> 代表占位符,表示当前类是一个泛型类

2.2泛型类的数组使用

泛型使用数组时: T[] ts = new T[5];//是不对的

原因:在编译时时,会把T转换为Object,而Object范围很大,到时候就无法确定是什么数据类型了。

代码示例:

public class Text1<T> { public T[] array=(T[])new Object[10]; //1 public T getPos(int pos) { return this.array[pos]; } public void setVal(int pos,T val) { this.array[pos]=val; } public static void main(String[] args) { Text1<Integer> kk=new Text1<>(); kk.setVal(0,3); kk.setVal(1,4); int C= kk.getPos(1); //2 System.out.println(C); } }
讯享网

代码中,注释1,由于无法直接new T[10],但是我们知道Object是所有类的父类,因此我们可以使用Object 然后再利用(T[ ])强制类型转换。

注释2,由于C的类型是int类型,所以不需要强制类型转换。

三.泛型的上界

上界,代表着是有上限的。特殊情况下:<T> 中的T也可能会是类,而想到类,我们可以试想,如果此类继承其它类的情况下会是什么样呢?

语法格式:

class 泛型类名称<类型形参 extends 类型边界> {
...
}

示例:

public class MyArray<E extends Number> {
... //相当于 < T >
}

解析:可以把<E extends Number>当成<T>来看,Number可能是接口,也可能是类。而此时的T,有了限制,T的范围是 Number的子类

:泛型无下界。

四.泛型的方法

我们需要注意的是静态方法使用泛型。

语法格式:方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }

示例:

//静态的泛型方法 需要在static后用 <> 声明泛型类型参数
public static <E> void swap(E[] array, int i, int j) {
E t = array[i];
array[i] = array[j];
array[j] = t;
}

:其他的方法不需要用 <> 声明

五.泛型与集合

在之后的使用中,我们经常会在集合中使用泛型,例如创建一个集合,但是你确定好了类型时,我们就可以使用泛型,来防止我们之后不会出现添加意外。

代码示例:

如图,我们创建一个ArrayList集合,one对象的类型实参为Integer,所以只能存放整形数 two对象的类型实参为String,所以我们只能存放字符串 结论:一旦我们确定了类型,那么我们就只能存放该类型数据。

小讯
上一篇 2024-12-28 10:58
下一篇 2025-01-02 15:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/10349.html