如何自定义泛型结构:泛型类,泛型接口
package com.atguigu.java;
/**
* 自定义的泛型类
*
* @author liangqichen
* @create 2021-10-08 20:02
*/
public class Order<T> {
String orderName;
int orderId;
//类的内部结构就可以使用类的泛型
T orderT;
public Order(){
// 编译不同过
// T[] arr = new T[10];
// 编译通过
T[] arr = (T[]) new Object[10];
}
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);
// }
public void show(){
// 编译不通过
// try {
//
// }catch (T t)
}
}
package com.atguigu.java;
/**
* @author liangqichen
* @create 2021-10-08 20:49
*/
// 异常类不能声明为泛型类
//public class MyException<T> extends Exception{
//}
package com.atguigu.java;
/**
* @author liangqichen
* @create 2021-10-08 20:19
*/
public class SubOrder extends Order<Integer>{
// SubOrder 不是泛型类
}
package com.atguigu.java;
/**
* @author liangqichen
* @create 2021-10-08 20:23
*/
public class SubOrder1<T> extends Order<T>{
// SubOrder1<T> 仍然是泛型类
}
package com.atguigu.java;
import org.junit.Test;
import java.util.ArrayList;
/**
* 如何自定义泛型结构:泛型类,泛型接口;泛型方法
*
* 1. 关于自定义泛型类,泛型接口:
*
*
*
* @author liangqichen
* @create 2021-10-08 20:11
*/
public class GenericTest1 {
@Test
public void test1(){
// 如果定义了泛型类,实例化时,没有指明类的泛型,则认为此泛型类型为Object类型
// 要求 如果大家定义了类是带泛型的,那么建议在实例化时,要指明类的泛型
Order order = new Order();
order.setOrderT(123);
order.setOrderT("ABC");
// 建议实例化时带上泛型
Order<String> order1 = new Order<>("orderAA",1001,"order:AA");
order1.setOrderT("AA:Hello");
}
@Test
public void test2(){
SubOrder sub1 = new SubOrder();
// 由于子类在继承带泛型的父类时,指明了泛型类型,则实例化子类对象时,不再需要指明泛型。
sub1.setOrderT(1122);
SubOrder1<String> sub2 = new SubOrder1<>();
sub2.setOrderT("order2...");
}
@Test
public void test3(){
// 泛型不同的引用不能相互赋值
ArrayList<String> list1 = null;
ArrayList<Integer> list2 = new ArrayList<Integer>();
//泛型不同的引用不能相互赋值
// list2 = list1;
Person p1 = null;
Person p2 = null;
p2 = p1;
}
}
```java
package com.atguigu.java;
/**
* @author liangqichen
* @create 2021-10-08 20:42
*/
public class Person {
}
本文介绍了如何在Java中自定义泛型类和接口。通过示例展示了泛型类`Order<T>`的创建,包括其内部结构的使用,以及泛型在静态方法和异常类中的限制。此外,还探讨了子类如何继承泛型类,以及在实例化时指定泛型类型的最佳实践。

被折叠的 条评论
为什么被折叠?



