博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中自定义泛型类、泛型接口、泛型方法
阅读量:3966 次
发布时间:2019-05-24

本文共 4457 字,大约阅读时间需要 14 分钟。

1.举例:

【Order.java】

public class Order 
{
private String orderName; private int orderId; //类的内部结构就可以使用类的泛型 private T orderT; public Order(){
//编译不通过 // T[] arr = new T[5]; //编译通过 T[] arr = (T[])new Object[5]; } public Order(String orderName,int orderId,T orderT){
this.orderId = orderId; this.orderName = orderName; this.orderT = orderT; } //如下的个方法都不是泛型方法 public void setOrderT(T orderT){
this.orderT = orderT; } public T getOrderT(){
return orderT; } @Override public String toString() {
return "Order{" + "orderName='" + orderName + '\'' + ", orderId=" + orderId + ", orderT=" + orderT + '}'; } //静态方法中不能使用类的泛型。// public static void show(T orderT){
// System.out.println(orderT);// } //不能在try-catch中使用泛型定义// public void show(){
// //编译不通过 try{
} catch (T e) {
}// } //泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没任何关系。 //换句话说,泛型方法所属的类是不是泛型类都没关系。 //泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定。 public
List
copyformArrayToList(E[] arr){
// public static
List
copyformArrayToList(E[] arr){
ArrayList
list = new ArrayList<>(); for(E e : arr){ list.add(e); } return list; }}

【SubOrder.java】

public class SubOrder extends Order
{
//SubOrder:不是泛型类 public
List
copyformArrayToList(E[] arr){
// public static
List
copyformArrayToList(E[] arr){
ArrayList
list = new ArrayList<>(); for(E e : arr){ list.add(e); } return list; }}

在这里插入图片描述

【SubOrder1.java】

public class SubOrder1
extends Order
{
//SubOrder1
:仍然是泛型类}

【测试】

@Test    public void test1(){
//如果定义了泛型类,实例化没指明类的泛型,则认为此泛型类型为Object类型 //要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型。// Order order = new Order();// order.setOrderT("ABC");// order.setOrderT("123"); //建议:实例化时指明类的泛型 Order
order = new Order("PCY",1127,"xixi"); order.setOrderT("PARKCHANYEOL"); //编译不通过 // order.setOrderT(123); System.out.println(order);//Order{orderName='PCY', orderId=1127, orderT=PARKCHANYEOL} } @Test public void test2(){
SubOrder subOrder = new SubOrder(); //由于子类在继承带泛型的父类时,指明了泛型类型。则实例化子类对象时,不再需要指明泛型。 subOrder.setOrderT(123); // subOrder.setOrderT("AA");编译不通过 //子类保留父类的泛型 SubOrder1
subOrder1 = new SubOrder1<>(); subOrder1.setOrderT("subOrder1..."); // 子类不保留父类的泛型,没类型 擦除 //编译都通过,相当于Object SubOrder2 subOrder2 = new SubOrder2(); subOrder2.setOrderT("AA"); subOrder2.setOrderT(123); } @Test public void test3(){
//泛型不同的引用不能相互赋值。 //尽管在编译时ArrayList
和ArrayList
是两种类型,但是, // 在运行时只 一个ArrayList被加载到JVM中 ArrayList
list1 = new ArrayList<>(); ArrayList
list2 = new ArrayList<>(); ArrayList
list3 = new ArrayList<>(); list1 = list2; // list1 = list3; } //测试泛型方法 @Test public void test4(){ Order
order = new Order<>(); Integer[] arr = new Integer[]{ 1,2,3,4}; //泛型方法在调用时,指明泛型参数的类型。 List
list = order.copyformArrayToList(arr); System.out.println(list); }

2.注意点:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.应用场景举例:

【DAO.java】:

在这里插入图片描述

* DAO:data(base) access object */public class DAO
{
//表的共性操作的DAO //添加一条记录 public void add(T t){
} //删除一条记录 public boolean remove(int index){
return false; } //修改一条记录 public void update(int index,T t){
} //查询一条记录 public T getIndex(int index){
return null; } //查询多条记录 public List
getForList(int index){
return null; } //泛型方法** 说明:*** 1public 与 返回值中间
非常重要,可以理解为声明此方法为泛型方法。* 2只声明了
的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。* 3
表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。* 4与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。 //举例:获取表中一共有多少条记录?获取最大的员工入职时间? public
E getValue(){ return null; }}

【CustomerDAO.java】:

public class CustomerDAO extends DAO
{
//只能操作某一个表的DAO}

【StudentDAO.java】:

public class StudentDAO extends DAO
{
//只能操作某一个表的DAO}

转载地址:http://fvuki.baihongyu.com/

你可能感兴趣的文章
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>
P9-c++对象和类-02构造函数和析构函数总结
查看>>
P10-c++对象和类-03this指针详细介绍,详细的例子演示
查看>>
Mule ESB-Content-Based Routing Tutorial(1)
查看>>
Mule ESB-Content-Based Routing Tutorial(2)
查看>>
Mule ESB-Content-Based Routing Tutorial(3)
查看>>
年末项目经验总结
查看>>
做事情要放下面子,拿起责任
查看>>
敏捷开发实践(1)-故事工作量估算导致的问题
查看>>
记一次解决jenkins持续构建,自动部署的问题
查看>>
敏捷开发实践(2)-要不要文档?
查看>>
写博意味着什么
查看>>
比较Cint() , int() , fix() ,round()的区别
查看>>
举例说明常用字符串处理函数
查看>>
软件生存期模型
查看>>
制定计划(问题的定义,可行性研究)
查看>>
需求分析
查看>>
软件设计
查看>>
程序编码
查看>>
软件测试
查看>>