一、 泛型

1、泛型的好处

**1)编译时,检查添加元素的类型,提高了安全2)减少了类西较换的次数,提高效率

不使用泛型
Dog -> Object -> Dog //放入到ArrayList 会先转成Object,在取出时,还需要转换成Dog

**使用泛型
Dog -> Dog -> Dog//放入时,和取出时,不需要类型转换,提高效率3)不再提示编译警告

2、泛型介绍

泛(广泛)型(类型)=> Integer,String,Dog(自定义类型)

1)泛型又称参数化类型,是Jdk5.0出现的新特性,解决数据类型的安全性问题

2)在类声明或实例化时只要指定好需要的具体的类型即可。
3) Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生
ClassCastException异常。同时,代码更加简洁、健壮
4)泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方
法的返回值的类型,或者是参数类型。[有点难]

可以在New一个对象的时候

3、泛型的语法

4、泛型语法和使用:

5、自定义泛型

1):自定义接口基本语法

interface 接口名<T,R..>{

}

细节:

2)、自定义泛型方法

基本语法:

修饰符<T,R..>返回类型方法名(参数列表){     };

示例:

import java.util.ArrayList;

@SuppressWarnings({"all"})
public class CustomMethodGeneric {
public static void main(String[] args) {
Car car = new Car();
car.fly("宝马", 100);//当调用方法时,传入参数,编译器,就会确定类型
System.out.println("=======");
car.fly(300, 100.1);//当调用方法时,传入参数,编译器,就会确定类型 //测试
//T->String, R-> ArrayList
Fish<String, ArrayList> fish = new Fish<>();
fish.hello(new ArrayList(), 11.3f);
}
} //泛型方法,可以定义在普通类中, 也可以定义在泛型类中
class Car {//普通类 public void run() {//普通方法
}
//说明 泛型方法
//1. <T,R> 就是泛型
//2. 是提供给 fly使用的
public <T, R> void fly(T t, R r) {//泛型方法
System.out.println(t.getClass());//String
System.out.println(r.getClass());//Integer
}
} class Fish<T, R> {//泛型类
public void run() {//普通方法
}
public<U,M> void eat(U u, M m) {//泛型方法 }
//说明
//1. 下面hi方法不是泛型方法
//2. 是hi方法使用了类声明的 泛型
public void hi(T t) {
}
//泛型方法,可以使用类声明的泛型,也可以使用自己声明泛型
public<K> void hello(R r, K k) {
System.out.println(r.getClass());//ArrayList
System.out.println(k.getClass());//Float
} }

6、泛型的继承和通配符:

1)、泛型不具备继承性

2)、<?>:支持任意泛型类型

3)、<? extends A>::支持A类以及A类的子类,规定了泛型的上限
4)、<? super A>::支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

 二、Junit

基本介绍:

1).JUnit是一个Java语言的单元测试框架
2).多数Java的开发环境都已经集成了JUnit作为单元测试的工具

简单用例:

import org.junit.jupiter.api.Test;

import java.util.*;

public class Generics {
public static void main(String[] args) { }
@Test
public void testList(){
DAO<User> dao = new DAO<>();
dao.save("1",new User(1,1,"zzz"));
dao.save("2",new User(2,10,"xxx"));
dao.save("3",new User(3,20,"ccc")); System.out.println(dao.list());
System.out.println(dao.get("2"));
dao.update("2", new User(4, 40, "vvv"));
dao.delect("3");
System.out.println(dao.list()); } }
class DAO<T>{
private Map<String,T> map = new HashMap<>(); public void save(String id,T entity){
map.put(id, entity);
}
public T get(String id){
T t = map.get(id);
return t;
}
public void update(String id,T entity){
map.put(id, entity);
} public List<T> list(){
ArrayList<T> list = new ArrayList<>();
Set<String> strings = map.keySet();
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
list.add(map.get(next));
}
return list;
}
public void delect(String id){
map.remove(id);
}
}
class User{
private int id;
private int age;
private String name; @Override
public String toString() {
return "User{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public User(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
}

最新文章

  1. 增加线程异步发送消息的方法一(Thread)
  2. R语言中的循环函数(Grouping Function)
  3. 用C#打开文件对话框的方法和简单使用的程序
  4. cpu缓存与多线程
  5. supersocket中quickstart文件夹下的MultipleCommandAssembly的配置文件分析
  6. Pascal编译器大全(非常难得)
  7. Eclipse中输入系统变量和运行参数
  8. FileOutputStream
  9. Oracle学习之start with...connect by子句的用法
  10. Effective C++学习笔记(Part One:Item 1-4)
  11. 学习笔记:javascript内置对象:数组对象
  12. Elasticsearch5.0.1安装
  13. SharePoint Framework 基于团队的开发(四)
  14. Spring Boot 与 swagger 结合
  15. ES6躬行记(11)——对象
  16. js事件冒泡和事件捕捉
  17. 非常优秀的swiper插件————幻灯片播放、图片轮播
  18. python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别
  19. 深入理解【缺页中断】及FIFO、LRU、OPT这三种置换算法
  20. VS 应用模板 所交税和实发工资的运算

热门文章

  1. 字符串的展开expand
  2. 怎样安装python的 模块、 包、 库方法总结
  3. 【Python+Django+Pytest】数据库异常pymysql.err.InterfaceError: (0, &#39;&#39;) 解决方案
  4. linux(CentOS7) 之 jdk1.8 下载及安装
  5. css编写规则BEM
  6. C# - 逆变的具体应用场景
  7. RBAC: K8s基于角色的权限控制
  8. 【解决了一个小问题】如何展示VictoriaMetrics组件上报的bucket数据
  9. vue3源码node的问题
  10. Git使用简单教程,从建库到远程操作