泛型、Junit
一、 泛型
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;
}
}
泛型、Junit的更多相关文章
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- 泛型(Generic)
本质:限制集合类型 我们在编写泛化类的时候,我们要时刻提醒自己,我们传入的参数T仅仅是一个Object类型,任何具体类型信息我们都是未知的. 小例子: package day02.generic; i ...
- Generic泛型
1.问题 未使用泛型时,元素的类型不安全:操作麻烦,可能需要强制转换import java.util.ArrayList;import java.util.List;import org.junit. ...
- java遍历泛型的方法
一.List遍历 Java中List遍历有三种方法来遍历泛型,主要为: 1.for循环遍历 2.iterator遍历 3.foreach遍历 package com.gmail.lsgjzhuwei; ...
- Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)
例子: 定义泛型Store package javabased; public interface Store<T> { } 两个实现类StringStore,IntegerStore p ...
- 赢在面试之Java泛型篇(十二)
139. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 好处: 1.类型安全,提供编译期 ...
- Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题
Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...
- [ Java面试题 ]泛型篇
1.Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 好处: 1.类型安全,提供编译期间的类 ...
- 从fastjson多层泛型嵌套解析,看jdk泛型推断
给你一组json数据结构,你把它解析出来到项目中,你会怎么做? // data1 sample { "code" : "1", "msg" ...
随机推荐
- Kylin安装Version1.6.0
Kylin安装,基于版本1.6.0,Kylin只有单机没有集群, 使用apache-kylin-1.6.0-hbase1.x-bin.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软 ...
- 初识python: 局部变量、全局变量
定义: 全局变量:在函数一开始定义的变量(全局范围内都可以使用) 局部变量:在函数中定义的变量(只能在函数中使用) 局部变量,例: #局部变量 def chang_name(name): print( ...
- linux系统安装python3和pip
一.安装python 1.安装依赖环境 yum install gcc -y yum -y install zlib-devel bzip2-devel openssl-devel ncurses-d ...
- centos7 安装zabbix3.0 安装zabbix4.0 yum安装zabbix 国内源安装zabbix 阿里云服务器安装zabbix
首先,此篇文章是有原因的. 刚开始也和大家一样来学习安装zabbix 奈何网上的教程和现实出现不一样的情况 在安装zabbix过程中,因为zabbix下载源是在国外,下载途中会出现终止下载的情况 tr ...
- vant引入及配置
1. vant 官网 https://youzan.github.io/vant/#/zh-CN/quickstart 2. 通 npm 安装 npm i vant -S 3.安装 babel-plu ...
- dart系列之:和null说再见,null使用最佳实践
目录 简介 不需要初始化对象为null null的三元操作符 如果在使用中需要判断类型是否为空,则不要使用late 本地变量的类型提升 总结 简介 null可能是大家在编写程序中最为头疼的一个东西,稍 ...
- Java基础(十)——枚举与注解
一.枚举 1.介绍 枚举类:类的对象只有有限个,确定的.当需要定义一组常量时,强烈建议使用枚举类.如果枚举类中只有一个对象,则可以作为单例模式的实现. 使用 enum 定义的枚举类默认继承了 java ...
- gin框架中的渲染
各种数据格式的响应 json.结构体.XML.YAML类似于java的properties.ProtoBuf 点击查看代码 // json响应 func someJson(context *gin.C ...
- 异常机制(Exception)
异常机制(Exception) 异常程序是指程序运行中出现的不期而至的各种状况,如文件找不到,网络连接失败,非法参数等. 异常发生在程序运行期间,它影响了正常的程序执行流程 检查性异常 最具代表性的检 ...
- ORB_SLAM3 + ROS采坑实录(从零开始的毕设生活第一弹)
ORB-SLAM3配置 https://github.com/UZ-SLAMLab/ORB_SLAM3 https://github.com/shanpenghui/ORB_SLAM3_Fixed E ...