• 主页
  • 分类
  • 归档
所有文章 关于我

  • 主页
  • 分类
  • 归档

泛型

2021-01-04 阅读量

1.泛型

1.1泛型概述

  • 泛型的介绍

    ​ 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制

  • 泛型的好处

    1. 把运行时期的问题提前到了编译期间
    2. 避免了强制类型转换
  • 泛型的定义格式

    • <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如:
    • <类型1,类型2…>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V>

1.2泛型类

  • 泛型类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.yishan.fanxing;

/**
* 自定义泛型类
* @author : yishan
* @date : 2021-01-04 11:27
*/
public class Box<E> {
private E name;
private E address;

public Box() {
}

public Box(E name, E address) {
this.name = name;
this.address = address;
}

public E getName() {
return name;
}

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

public E getAddress() {
return address;
}

public void setAddress(E address) {
this.address = address;
}
}
  • 测试类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.yishan.fanxing;

/**
* 测试自定义泛型
* @author : yishan
* @date : 2021-01-04 11:29
*/
public class TestBox {
public static void main(String[] args) {
Box<String> box = new Box<>();
box.setName("王五");
String name = box.getName();
System.out.println("name = " + name);
}
}

1.3泛型方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.yishan.fanxing;

import java.util.ArrayList;

/**
* 自定义泛型方法
*
* @author : yishan
* @date : 2021-01-04 11:47
*/
public class Test01 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
addElement(list, "aaa", "bbb", "ccc", "ddd", "eee");
System.out.println("list = " + list);

System.out.println("---------------------------------------------");

ArrayList<Integer> list1 = new ArrayList<>();
addElement(list1, 111, 222, 333, 444, 555);
System.out.println("list1 = " + list1);

}

/**
* 集合添加操作
* 需要指定相应的泛型类型
* @param list
* @param e
* @param e1
* @param e2
* @param e3
* @param e4
* @param <E>
* @return
*/
public static <E> ArrayList<E> addElement(ArrayList<E> list, E e, E e1, E e2, E e3, E e4) {
list.add(e);
list.add(e1);
list.add(e2);
list.add(e3);
list.add(e4);
return list;
}
}

1.4泛型接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.yishan.fanxing;

/**
* 泛型接口
*
* @author : yishan
* @date : 2021-01-04 15:15
*/
public class Test02 {
public static void main(String[] args) {
//实现泛型接口的类为定义类型,在创建对象时需要定义类型
Studentimpl<Integer> studentimpl = new Studentimpl<>();
studentimpl.method(123);

StudentImpl2 studentImpl2 = new StudentImpl2();
studentImpl2.method("aaa");

}
}

//泛型接口
interface Person<E> {
public abstract void method(E e);
}

//泛型类(为定义类型)
class Studentimpl<E> implements Person<E> {

@Override
public void method(E e) {
System.out.println(e);
}
}

//泛型类(定义泛型类型)
class StudentImpl2 implements Person<String> {

@Override
public void method(String s) {
System.out.println(s);
}
}

1.5类型通配符

  • 类型通配符: <?>
    • ArrayList<?>: 表示元素类型未知的ArrayList,它的元素可以匹配任何的类型
    • 但是并不能把元素添加到ArrayList中了,获取出来的也是父类类型
  • 类型通配符上限: <? extends 类型>
    • ArrayListList <? extends Number>: 它表示的类型是Number或者其子类型
  • 类型通配符下限: <? super 类型>
    • ArrayListList <? super Number>: 它表示的类型是Number或者其父类型
  • 泛型通配符的使用

public class GenericDemo4 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList<>();
ArrayList list2 = new ArrayList<>();
ArrayList list3 = new ArrayList<>();
ArrayList list4 = new ArrayList<>();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    method(list1);
method(list2);
method(list3);
method(list4);

getElement1(list1);
getElement1(list2);//报错
getElement1(list3);
getElement1(list4);//报错

getElement2(list1);//报错
getElement2(list2);//报错
getElement2(list3);
getElement2(list4);
}

// 泛型通配符: 此时的泛型?,可以是任意类型
public static void method(ArrayList<?> list){}
// 泛型的上限: 此时的泛型?,必须是Number类型或者Number类型的子类
public static void getElement1(ArrayList<? extends Number> list){}
// 泛型的下限: 此时的泛型?,必须是Number类型或者Number类型的父类
public static void getElement2(ArrayList<? super Number> list){}
}
赏

谢谢你请我吃糖果

  • java基础
  • 泛型
  • javase

扫一扫,分享到微信

微信分享二维码
集合-Set
Collection中的常用方法
  1. 1. 1.泛型
  2. 2. 1.1泛型概述
  3. 3. 1.2泛型类
  4. 4. 1.3泛型方法
  5. 5. 1.4泛型接口
  6. 6. 1.5类型通配符
载入天数...载入时分秒...
本站总访问量:次 | 本站访客数:人
  • 所有文章
  • 关于我

tag:

  • AJAX
  • ElasticSearch
  • java基础
  • IO
  • JDBC
  • jdbc
  • jvm
  • JVM
  • 类加载器
  • Linux
  • redis
  • spring
  • spring-cloud
  • SpringMVC
  • Docker
  • dubbo
  • MyBatis
  • 框架
  • mysql
  • web核心
  • zookeeper
  • MarkDown基础
  • 冒泡排序
  • 二分查找
  • Lambad
  • 多线程
  • 实例程序
  • 异常
  • 算法基础
  • 版本控制
  • 设计模式
  • Collection
  • TreeMap
  • HashSet
  • TreeSet
  • Vector向量
  • HashMap
  • 泛型
  • ArrayList
  • LinkedList
  • Map
  • List
  • Set
  • 垃圾回收
  • jvm调优
  • 项目
  • js
  • 项目总结
  • k8s

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

一枚17级软件工程学生<br><br>愿待java如初恋<br>也希java诚待我