ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java泛型笔记

2022-09-10 01:30:26  阅读:211  来源: 互联网

标签:Java name age Dog 笔记 泛型 new public


泛型

1.引出泛型

需求:

​ 在ArrayList中添加3个Dog对象 dog对象含有name和age 使用get方法输出name和age

2.编写一个狗类

package com.hui;

public class Dog {
    private String name;
    public int age;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Dog() {
    }

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

3.编写一个猫类

package com.hui;

public class Cat {
    private String name;
    public int age;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Cat() {
    }

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

4.使用传统方法

public class Generic01 {
    public static void main(String[] args) {

        ArrayList arrayList = new ArrayList();
        //添加三个狗类
        arrayList.add(new Dog("dahuang", 22));
        arrayList.add(new Dog("huazi", 21));
        arrayList.add(new Dog("wolong", 33));
        
        //不小心添加一个猫类
        arrayList.add(new Cat("maomi",76));

        //遍历
        for (Object o : arrayList) {
            //向下转型
            Dog dog = (Dog) o;
            System.out.println(dog.getName());
            System.out.println(dog.getAge());
        }
    }
}

5.程序运行结果

image-20220909112812156

6.得出传统方法的问题

  • 1.不能对加入集合中的数据进行约束(不安全)
  • 2.遍历的时候需要进行类型转换,影响效率

7.使用泛型解决前面的问题

@SuppressWarnings("all")
public class Generic02 {
    public static void main(String[] args) {

        //使用泛型 表示存放到集合中的元素为Dog类型
        ArrayList<Dog> arrayList = new ArrayList<Dog>();
        arrayList.add(new Dog("dahuang", 22));
        arrayList.add(new Dog("huazi", 21));
        arrayList.add(new Dog("wolong", 33));

        //对数据类型进行约束,编译器报错
        //arrayList.add(new Cat("maomi",76));

        //遍历的时候直接取出Dog类型不是Object类型 不用进行类型转换
        for (Dog dog : arrayList) {
            System.out.println(dog.getName()+"--"+dog.getAge());
        }
    }
}

8.泛型的好处

  • 编译时检查元素的类型,提高了安全性
  • 减少了类型转换次数,提高了程序的效率

9.泛型的介绍

泛型就是可以表示数据类型的一种数据类型

在类声明或实例化时候只要指定具体的类型即可

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

指定类型不会出现类型转换异常的发生

10.泛型的作用

可以在类声明的时候通过一个标识表示类中某个属性的类型

//该数据类型在定义Person对象的时候指定,在编译期间,就确定E是什么
class Person<E>{
    
    // E表示s的数据类型
    E s;
    
    // E也可以是参数类型
    public Person(E s) {
        this.s = s;
    }
    
    // E也可以是返回类型
    public E f(){
        return s;
    }
}

11.泛型的语法

在类名后边指定类型参数的值(类型)

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

给泛型指定数据类型时,要求是引用数据类型,不能是基本数据类型。

   		 ArrayList<int> int = new ArrayList<int>();     //报错

在给泛型指定具体类型后,可以传入该类型或其子类型

不写泛型默认是Object类型

泛型使用形式:

  ArrayList<String> strings = new ArrayList<这里可以省略不写>();

12.自定义泛型

基本语法:

class 类名<T,R...>{

// ...表示可以有多个泛型

​ 成员

}

静态方法不能使用泛型:

​ 静态是和类相关的,在类加载时,对象还没创建出来,所以如果静态方法和静态属性使用了泛型,JVM就不知道是什么类型,无法完成初始化。

泛型方法:

​ 可以使用类声明的泛型,也可以使用自己声明的泛型

13.泛型的继承和通配符

泛型不具备继承性

支持任意泛型类型

<? extends AA> AA表示上限 可以接受AA或AA的子类

<? super AA> 支持AA类以及AA类的父类

标签:Java,name,age,Dog,笔记,泛型,new,public
来源: https://www.cnblogs.com/hellohui/p/16675874.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有