



package com.atguigu.java1;import org.junit.Test;import java.util.List;/** * 如何自定义泛型结构:泛型类、泛型接口;泛型方法。 * * * @author Dxkstart * @create 2021-05-27 18:47 */public class GenericTest2 { @Test public void test1(){ //如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型 //要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型。 Order order = new Order(); order.setOrderT(123); order.setOrderT("ABC"); //建议:实例化时指明类的泛型 Order<String> order1 = new Order<String>("orderAA",1001,"order:AA"); order1.setOrderT("AA:hello"); } @Test public void test2(){ SubOrder sub1 = new SubOrder(); //由于子类在继承泛型的父类时,指明了泛型类型。则实例化子类对象时,不再需要指明泛型。 sub1.setOrderT(1112); SubOrder1<String> sub = new SubOrder1<>(); sub.setOrderT("order2..."); } @Test public void test3(){ Order<String> order = new Order<>(); Integer[] arr = {1, 2, 3, 4}; //泛型方法在调用时,指明泛型参数的类型。 List<Integer> list = order.copyFromArrayToList(arr); System.out.println(list); }}
package com.atguigu.java1;import java.util.ArrayList;import java.util.List;/** * 自定义泛型类 * * @author Dxkstart * @create 2021-05-27 18:40 */public class Order<T> { String orderName; int orderId; //类的内部结构就可以使用类的泛型 T orderT; //构造器 public Order() { } public Order(String orderName, int orderId, T orderT) { this.orderName = orderName; this.orderId = orderId; this.orderT = orderT; } //方法 //如下的方法都不是泛型方法 public T getOrderT() { return orderT; } public void setOrderT(T orderT) { this.orderT = orderT; } @Override public String toString() { return "Order{" + "orderName='" + orderName + '\'' + ", orderId=" + orderId + ", orderT=" + orderT + '}'; } //静态方法中不能使用类的泛型。// public static void show(T orderT){// System.out.println(orderT);// } //泛型方法 //泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。 //换句话说:泛型方法与所属的类是不是泛型类都没有关系 //泛型方法,可以声明为static的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定。 public <E> List<E> copyFromArrayToList(E[] arr){ ArrayList<E> list = new ArrayList<E>(); for (E e: arr){ list.add(e); } return list; }}
package com.atguigu.java1;/** * @author Dxkstart * @create 2021-05-27 18:56 */public class SubOrder extends Order<Integer>{// SubOrder:不是泛型类}
package com.atguigu.java1;/** * @author Dxkstart * @create 2021-05-27 19:02 */public class SubOrder1<T> extends Order<T>{//SubOrder1<T>:仍然是泛型类}