文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中的泛型怎么理解

2023-06-30 15:12

关注

本篇内容介绍了“Java中的泛型怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Java中的泛型怎么理解

优点:

public static void main(String[] args) {        List<String> list = new ArrayList<>();        list.add("石原里美");        list.add("工藤静香");        list.add("朱茵");        for (String s : list) {            System.out.println(s);        }    }输出结果:石原里美工藤静香朱茵

并且泛型还可以在很多地方进行定义,比如在类后面就是泛型类、方法声明上就是泛型方法、接口后面就是泛型接口。接下来我们共同来学习一下这些泛型是如何使用的:

自定义泛型类

概念

public class MyArrayList<E>{    }

实战教学

现创建一个泛型类,实现基本的增加、删除操作,以此来具体了解其用法:

//泛型类MyArrayLIstpublic class MyArrayLIst<E> {    public void add(E e){    }    public void remove(E e){    }}//mainpublic static void main(String[] args) {        MyArrayLIst<String> list = new MyArrayLIst<>();        //通过对泛型的设定,实现对数据专一处理        list.add("石原里美");        list.add("工藤静香");        list.remove("工藤静香");    }

泛型类的原理:

把出现泛型变量的地方全部替换成传输的真实的数据类型。

通过认真观察,其实不难去发现,泛型类与普通类的最大区别在于在调用方法的时候可以统一的对同一种数据进行处理,不会涉及到其他的数据类型,从一定程度上避免了强制类型转化时可能会出现的问题。

Java中的泛型怎么理解

自定义泛型方法

概念

public <E> void view(E e){    }

实战教学

无论传入何种类型的数组,都可以返回它的内容,即实现Arrays.toString()的作用

public static void main(String[] args) {        String [] name = {"石原里美","工藤静香","朱茵"};        view(name);        Integer [] age = {18,19,20};        view(age);    }    public static  <T> void view(T[] arr){        StringBuilder list = new StringBuilder();        for (int i = 0; i < arr.length; i++) {            list.append(arr[i]).append("\t");        }        System.out.println(list);    }

通过实现对泛型方法的定义,可以实现多种数据类型的接收,应用范围更加广泛。

自定义泛型接口

概念

public interface People <E>{    }

实战教学

定义一个People接口,实现对老师Teacher类、学生Student等类的操作

//People接口public interface People <E>{    void run(E e);    void height(E e);}//Student类public class Teacher {}//实现类Fantypepublic class Fantype implements People<Teacher> {    @Override    public void run(Teacher teacher) {    }    @Override    public void height(Teacher teacher) {    }}

通过对上述代码的观察,可以发现,People后定义的是什么类型,那么该实现类只能对该种数据类型进行操作,其他类型不可以进行此操作。

通配符和上下限

通配符

假设现在有一场为学生和老师而举办的比赛,需要比较速度究竟谁更快,分别创建一定数量的对象并将其传入集合之中。然而当我们将这两个集合分别传入方法中的时候,会发现,学生对象集合list2出现报错,为什么呢?原因是因为数据类型不同,那么该如何使得两种类型都可以传入呢?或许这个时候就会有人说了:“既然两个类都是People的子类,那么为什么不定义它的泛型是People呢?”这个想法很好,但是我们需要明确一点的是子类与父类虽然是有关系的,但是定义之后的集合是没有关系的,所以这里是行不通的。

//main//老师对象集合ArrayList<Teacher> list1 = new ArrayList<>();list1.add(new Teacher());list1.add(new Teacher());pk(list1);//学生对象集合ArrayList<Student> list2 = new ArrayList<>();list2.add(new student());list2.add(new student());pk(list2);//由于pk方法的形参是泛型为Teacher的集合,所以会报错//父类class People{    }//子类class Teacher extends People{    }class student extends People{    }//pk方法:public static void pk(ArrayList<Teacher> people){}

应对这个问题,我们可以便可以将本篇文章引入的知识“通配符”放在实际应用中解决问题了,通过其简短的概念“?可以在‘使用泛型’的时候代表一切类型”就可以理解其作用了,这里我们可以使用“?”共同代表两种类型。

public static void pk(ArrayList<?> people){//通过通配符?便可以将这个问题解决掉    }

上下限

然而此时又出现一个问题,定义了一个dog类,试图创建一些对象并传入集合中混入比赛,这种当然情况当然是不允许发生的,然而?是可以表示任意类型的,并不能对其进行限制。因此上下限的作用就体现出来了:

public static void pk(ArrayList<? extends People> people){//通过上下限便可以将这个问题解决掉//要求传入的类型必须是People的子类才可以    }

“Java中的泛型怎么理解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯