image.png
    image.png
    image.png
    image.png

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