泛型的定义:以类型作为参数的类就叫泛型。默认值为Object。
使用
泛型的作用:提高程序健壮性,简化代码。
泛型数据类型只能是引用类型,不能是值类型。
大概思路:创建N个实体类,一个泛型接口,里面写增、删、改、查的方法,多个实现类继承这个泛型接口。
可实现效果:可以把泛型接口看成一个公共的接口,所有实现类只需实现此接口。所以增、删、改、查的方法只需要写一次。
实现代码如下:
首先创建两个实体类:
package com.zking.text;
/**
* 人员表实体类
*/
public class Person {
/**
* 编号
*/
private String pid;
/**
* 姓名
*/
private String pname;
/**
* 地址
*/
private String address;
/**
* 无参构造方法
*/
public Person() {
super();
// TODO Auto-generated constructor stub
}
/**
* 有参构造方法
*
* @param sid
* 编号
* @param sname
* 姓名
* @param ssex
* 地址
*/
public Person(String pid, String pname, String address) {
super();
this.pid = pid;
this.pname = pname;
this.address = address;
}
/**
* 封装
*
* @return
*/
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
/**
* 输出
*/
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", address=" + address + "]";
}
}
package com.zking.text;
/**
* 学生表实体类
*/
public class Student {
/**
* 编号
*/
private String sid;
/**
* 姓名
*/
private String sname;
/**
* 性别
*/
private String ssex;
/**
* 无参构造方法
*/
public Student() {
super();
// TODO Auto-generated constructor stub
}
/**
* 有参构造方法
*
* @param sid
* 编号
* @param sname
* 姓名
* @param ssex
* 性别
*/
public Student(String sid, String sname, String ssex) {
super();
this.sid = sid;
this.sname = sname;
this.ssex = ssex;
}
/**
* 封装
*
* @return
*/
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSsex() {
return ssex;
}
public void setSsex(String ssex) {
this.ssex = ssex;
}
/**
* 输出
*/
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + ", ssex=" + ssex + "]";
}
}
然后创建一个泛型接口(重点):
package com.zking.text;
import java.util.List;
/**
* 泛型的接口
*
* @param <T>
* 未指定的对象 可以有多个对象 中间用,隔开
*/
public interface IText<T> {
/**
* 查询所有信息
*
* @return
*/
public List<T> findAll();
/**
* 根据列返回指定对象
*
* @param object
* 因未指定列,不知数据类型,所以传入object对象
* @return
*/
public T findAllByCell(Object object);
/**
* 新增的方法
*
* @param t
* 未指定的对象
* @return
*/
public int add(T t);
/**
* 编辑的方法
*
* @param t
* 未指定的对象
* @return
*/
public int edit(T t);
/**
* 移除的方法
*
* @param object
* 因未指定列,不知数据类型,所以传入object对象
* @return
*/
public int remove(Object object);
}
创建实现类:
package com.zking.text;
import java.util.List;
/**
* 人员表的实现类 T对象改为指定的类(Person类)
*
*/
public class PersonIText implements IText<Person> {
/**
* 查询所有信息
*/
@Override
public List<Person> findAll() {
return null;
}
/**
* 根据列返回指定对象
*/
@Override
public Person findAllByCell(Object object) {
return null;
}
/**
* 新增的方法
*/
@Override
public int add(Person t) {
return 0;
}
/**
* 编辑的方法
*/
@Override
public int edit(Person t) {
return 0;
}
/**
* 移除的方法
*/
@Override
public int remove(Object object) {
return 0;
}
}
package com.zking.text;
import java.util.List;
/**
* 学生表的实现类 T对象改为指定的类(Student类)
*
*/
public class StudentIText implements IText<Student> {
/**
* 查询所有信息
*/
@Override
public List<Student> findAll() {
return null;
}
/**
* 根据列返回指定对象
*/
@Override
public Student findAllByCell(Object object) {
return null;
}
/**
* 新增的方法
*/
@Override
public int add(Student t) {
return 0;
}
/**
* 编辑的方法
*/
@Override
public int edit(Student t) {
return 0;
}
/**
* 移除的方法
*/
@Override
public int remove(Object object) {
return 0;
}
}
然后用main()方法调用:
// 泛型在main()方法里使用
// 里氏替换原则 实例化学生表实现类
IText it = new StudentIText();
// 调用学生表的add方法。
it.add(new Student(UUID.randomUUID().toString(), "张三", "男"));