java中泛型的使用

wukj_litai wukj_litai     2022-11-30     569

关键词:

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。

在Java中我们使用泛型在集合框架中比较多,比如下面的例子:

ArrayList<String> arrayList = new ArrayList<String>();

我们创建了一个ArrayList的对象,arrayList 指定在这个集合中只能存放String 类型的数据,当我们存入非String类型的数据的时候,编译都不能通过。我们从泛型方法,泛型类,泛型接口三个方面看下这个泛型的使用。

首先泛型方法:

public <T> void A(T t)
        System.out.println(t);
    

上面的例子就是一个泛型的方法,我们不能确定传入的参数是什么类型的,就把这个函数定义为泛型的,可以传入我们需要的类型。

接下来我们看一个泛型类的例子:

/**
     * 这个类是泛型类
     * @author wukj
     * @param <T>
     */
    class B<T>

        public <T> void show(T t)

            System.out.println(t);
        

        public <Q> void touch(Q q)
            System.out.println(q);
        

    
    /**
     * 这个类中有泛型方法
     * @author wukj
     *
     */
class C

        public <T> void show(T t)

            System.out.println(t);
        

        public <Q> void touch(Q q)
            System.out.println(q);
        

    

在上面的例子中有二个类,其中类B是一个泛型类,我们在创建类B的对象的时候,指定了类型之后,调用类B的show 方法的时候,传入的参数类型要和指定的类型匹配,但是对于类B的touch ,并没有这样的要求。对于类C,不是一个泛型类,里面的二个方法都是泛型的,有二个泛型的方法,二者之间没有任何的关系,可以传不同类型的参数。

泛型方法使用过程中需要特别注意的一个知识点是静态的方法上的类型不能和类上的泛型相同,比如下面的代码:


class D<T>

    public static <T>  void show()
        .......
    

因为static的方法是在创建对象之前调用的,在未创建对象之前就调用这个方法,泛型的类型还没有确定下来。

最后我们看点泛型的接口:

interface  Inter<T t>
void  show(T t);

定义了一个接口,我们可以创建一个类去实现这个接口:

class InterImp implements Inter<String>
   public void show(String s)
     ......
     

如果实现接口的时候也不能确定参数的类型,那么这个类只好也是泛型类:

class InterImp <T> implements Inter<T>
public void show(T t)
.......

最后还有一个小的知识点是,关于通配符的使用:

public static  void   printColl(Arraylist<?> al)
   Iterator <?> it = al.iterator();
   while(it.hasNext())
   System.out.println(it.next);
  
 

上面的? 即使通配符。

关于泛型就总结了这些知识点,博客中的问题,希望大家留言给我。

java中泛型的使用

参考技术A泛型可以避免强制类型转换,设定集合对象中存储的对象类型。比如List<String>list=newArrayList<String>();那在这个list中,只能存储字符串对象。 参考技术B一般使用在集合上,比如现在将一个字符串类型放在集合里... 查看详情

java中泛型的ktve分别代表啥

参考技术A一般k表示key(键);t表示type(类型);v表示value(值);e表示entry(实体)本回答被提问者采纳 参考技术B泛型,里面那个T什么的,就是类型的名字。泛型就是类型变量跟inta里面那个a是一样的。 查看详情

java中泛型的深入理解(代码片段)

文章目录泛型深入泛型基本介绍自定义泛型类自定义泛型方法自定义泛型接口泛型通配符和上下限泛型深入泛型基本介绍泛型的概述:泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。泛... 查看详情

java基础java中如何获取一个类中泛型的实际类型

泛型的术语<>:念做typeofList<E>:E称为类型参数变量ArrayList<Integer>:Integer称为实际类型参数ArrayList<Integer>:整个ArrayList<Integer>称为参数化类型(对应着java.lang.reflect.ParameterizedType接口)泛型反射相关APIType[] 查看详情

java——泛型(代码片段)

文章目录Java中泛型的概述Java中泛型的语法规则泛型集合泛型方法泛型方法示例(代码演示)小结泛型类泛型类示例(代码演示)小结泛型接口泛型接口示例(代码演示)高级泛型总结Java中泛型的概述泛型... 查看详情

TypeScript 中泛型的不安全隐式转换

】TypeScript中泛型的不安全隐式转换【英文标题】:UnsafeimplicitconversionofgenericsinTypeScript【发布时间】:2018-05-3017:40:24【问题描述】:TypeScript编译器tsc编译以下代码没有任何问题,即使带有--strict标志也是如此。但是,该代码包含... 查看详情

反射中泛型的擦除赋值

publicclassTest01publicstaticvoidmain(String[]args)throwsNoSuchMethodException,InvocationTargetException,IllegalAccessException//定义一个I 查看详情

java中如何获取一个类中泛型的实际类型

 本文链接:https://blog.csdn.net/kuuumo/article/details/83021158 ______________________________________________________________________________________________________Java获取泛型T的类型T.classhttps://b 查看详情

java泛型的设计

...言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。泛型基础泛型类我们首先定义一个简单的Box类:public... 查看详情

当list的size为0时,如何获取list中泛型的类型(代码片段)

根据我自己的浅薄知识,List的泛型只是用来进行类型的安全限制的,不是真的存在,有一种叫泛型擦除的概念。然后在网上找有什么花里胡哨的解决方法,没想到真的找到了。原博客地址:获取List对象的泛型类(原创)publicclas... 查看详情

从零开始自学java泛型的设计难不难?

...言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。 泛型基础泛型类我们首先定义一个简单的Box类:... 查看详情

如何反射获取list<t>中泛型的类型

参考技术AClass1sxx=newClass1s();varinters=xx.GetType().GetInterfaces();//获取所有继承的泛型类型if(inters.Length>0)varts=inters[0].GetGenericArguments();//获取第一个泛型的形参类型数组if(ts.Length>0)varres=ts[0];//获取到Class1//todo:后续代码已知类型Class1,... 查看详情

android中泛型在实际项目中的使用小结(代码片段)

文章目录1.什么是泛型?为什么要用泛型?2.Android中的使用场景2.1findViewById的使用变化2.2BaseAdapter实现封装的Adapter2.3网络请求数据2.4其他应用场景3.总结前言为什么要总结泛型的使用?泛型在项目中是如何体现价值的&#... 查看详情

提供一个方法用于遍历获取hashmap<string,string>中所有value并存放在list中返回考虑上集合中泛型的使用?

参考技术ApublicList<String>getValueList(HashMap<String,String>map)ArrayList<String>valueList=newArrayList<>():Collection<String>values=map.values();for(Stringvalue:values)valueList.add(value);returnvalueList;本回答被提问者采纳 查看详情

java示例代码_确定Java中泛型字段的类型

java示例代码_确定Java中泛型字段的类型 查看详情

java中泛型中的几个符号

 Java泛型中的标记符含义:  E -Element(在集合中使用,因为集合中存放的是元素) T -Type(Java类) K -Key(键) V -Value(值) N -Number(数值类型)? - 表示不确定的java类型 S、U、V... 查看详情

[译]聊聊c#中的泛型的使用(新手勿入)(代码片段)

写在前面今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发现了一些问题,因此也进行了纠正,当然,原文的地址我... 查看详情

java泛型的基本介绍和使用

现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用。泛型在java中,是一个十分重要的特性,所以要好好的研究下。一、泛型的基本概念 泛型的定义:泛型是JDK1.5的一项... 查看详情