1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Java泛型详解:泛型类 泛型方法使用

Java泛型详解:泛型类 泛型方法使用

时间:2024-04-08 06:17:39

相关推荐

Java泛型详解:泛型类 泛型方法使用

转自:/jpfss/p/9928747.html

一、泛型类定义及使用

public class Point<T> {private T x;private T y;public T getX() {return x;}public void setX(T x) {this.x = x;}public T getY() {return y;}public void setY(T y) {this.y = y;}}

使用:

Point<Integer> point = new Point<>();point.setX(100);System.out.println(point.getX());

1)、定义泛型:Point<T>

Point<T>即在类名后面加一个尖括号,括号里是一个大写字母。这里写的是T,其实这个字母可以是任何大写字母

2)、类中使用泛型

这个T表示派生自Object类的任何类,比如String、Integer、Double等等。这里要注意的是,T一定是派生于Object类的。为方便起见,大家可以在这里把T当成String,即String在类中怎么用,那T在类中就可以怎么用!所以下面的:定义变量,作为返回值,作为参数传入的定义就很容易理解了

private T x;public T getX() {return x;}public void setX(T x) {this.x = x;}

3)、使用泛型类

首先,是构造一个实例:

Point<Integer> point = new Point<>();

这里与普通构造类实例的不同之点在于,普通类构造函数是这样的:Point point = new Point();

而泛型类的构造则需要在类名后添加上<Integer>,即一对尖括号,中间写上要传入的类型

因为我们构造时,是这样的:class Point<T>,所以在使用的时候也要在Point后加上类型来定义T代表的意义

然后在getVar()setVar()时就没有什么特殊的了,直接调用即可

从上面的使用时,明显可以看出泛型的作用,在构造泛型类的实例的时候:尖括号中,你传进去的是什么,T就代表什么类型。这就是泛型的最大作用,我们只需要考虑逻辑实现,就能拿给各种类来用

4)、使用泛型实现的优势

相比使用Object的方式,有两个优点:

1)不用强制转换

//使用Object作为返回值,要强制转换成指定类型 Float floatX = (Float) point.getX();

//使用泛型时,不用强制转换,直接出来就是IntegerSystem.out.println(point.getX());

2)在setVar()时如果传入类型不对,编译时会报错

二、多泛型变量定义及字母规范

1)、多泛型变量定义

public class MorePoint<T, U> {private T x;private T y;private U name;public T getX() {return x;}public void setX(T x) {this.x = x;}public T getY() {return y;}public void setY(T y) {this.y = y;}public U getName() {return name;}public void setName(U name) {this.name = name;}}

使用:

MorePoint<Integer, String> morePoint = new MorePoint<>();morePoint.setName("hello world");System.out.println(morePoint.getName());

2)、字母规范

在定义泛型类时,我们已经提到用于指定泛型的变量是一个大写字母

其实任意一个大写字母都可以。他们的意义是完全相同的,但为了提高可读性,大家还是用有意义的字母比较好,一般来讲,在不同的情境下使用的字母意义如下:

E——Element,常用在Java Collection里,如:List<E>Iterator<E>Set<E>K、V——Key、Value,代表Map的键值对N——Number,数字T——Type,类型,如String,Integer等等

三、泛型接口定义及使用

//在接口上定义泛型public interface Info<T> {//定义抽象方法,抽象方法的返回值就是泛型类型T getVar();void setVar(T t);}

public class InfoImpl implements Info<String> {@Overridepublic String getVar() {return null;}@Overridepublic void setVar(String str) {}}

四、泛型函数定义及使用

//静态函数 public static <T> void staticMethod(T t) {}//普通函数 public <T> void otherMethod(T t) {}

使用方法:

//静态方法StaticFans.staticMethod("hello world");StaticFans.<String>staticMethod("hello world");//常规方法StaticFans staticFans = new StaticFans();staticFans.otherMethod("hello world");staticFans.<String>otherMethod("hello world");

五、其它用法:Class<T>类传递及泛型数组

1)、使用Class<T>传递泛型类Class对象

public static <T> List<T> parseArray(String response, Class<T> clazz) {return JSON.parseArray(response, clazz);}

2)、定义泛型数组

//接收可变参数public static <T> T[] fun(T... arg) {//返回泛型数组return arg;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。