//JDK 5.0以前
Comparable c = new Date();
System.out.println(c.comparaTo("red");
//JDK 5.0以后
Comparable c = new Date();
System.out.println(c.comparaTo("red");
/**
* 自定義泛型類Order
*/
class Order {
private String orderName;
private int orderId;
//使用T類型定義變量
private T orderT;
public Order() {
}
//使用T類型定義構(gòu)造器
public Order(String orderName, int orderId, T orderT) {
this.orderName = orderName;
this.orderId = orderId;
this.orderT = orderT;
}
//這個(gè)不是泛型方法
public T getOrderT() {
return orderT;
}
//這個(gè)不是泛型方法
public void setOrderT(T orderT) {
this.orderT = orderT;
}
//這個(gè)不是泛型方法
@Override
public String toString() {
return "Order{" +
"orderName='" + orderName + '\'' +
", orderId=" + orderId +
", orderT=" + orderT +
'}';
}
// //靜態(tài)方法中不能使用類的泛型。
// public static void show(T orderT){
// System.out.println(orderT);
// }
// //try-catch中不能是泛型的。
// public void show(){
// try {
//
// }catch (T t){
//
// }
// }
//泛型方法:在方法中出現(xiàn)了泛型的結(jié)構(gòu),泛型參數(shù)與類的泛型參數(shù)沒有任何關(guān)系。
//換句話說,泛型方法所屬的類是不是泛型類都沒有關(guān)系。
//泛型方法,可以聲明為靜態(tài)的。
// 原因:泛型參數(shù)是在調(diào)用方法時(shí)確定的。并非在實(shí)例化類時(shí)確定。
public static List copyFromArryToList(E[] arr) {
ArrayList list = new ArrayList<>();
for (E e :
list) {
list.add(e);
}
return list;
}
}
自定義泛型類Order的使用
@Test
public void test1() {
//如果定義了泛型類,實(shí)例化沒有指明類的泛型,則認(rèn)為此泛型類型為Object類型
//要求:如果大家定義了類是帶泛型的,建議在實(shí)例化時(shí)要指明類的泛型。
Order order = new Order();
order.setOrderT(123);
System.out.println(order.getOrderT());
order.setOrderT("abc");
System.out.println(order.getOrderT());
//建議:實(shí)例化時(shí)指明類的泛型
Order order1 = new Order<>("Tom", 16, "male");
order1.setOrderT("AA:BBB");
System.out.println(order1.getOrderT());
}
@Test
//調(diào)用泛型方法
public void test2(){
Order order = new Order<>();
Integer [] arr = new Integer[]{1,2,3,4,5,6};
List list = order.copyFromArryToList(arr);
System.out.println(list);
}
4.2自定義泛型接口
代碼示例:
/**
* 自定義泛型接口
*/
public interface DemoInterface {
void show();
int size();
}
//實(shí)現(xiàn)泛型接口
public class Demo implements DemoInterface {
@Override
public void show() {
System.out.println("hello");
}
@Override
public int size() {
return 0;
}
}
@Test
//測(cè)試泛型接口
public void test3(){
Demo demo = new Demo();
demo.show();
}
//泛型方法:在方法中出現(xiàn)了泛型的結(jié)構(gòu),泛型參數(shù)與類的泛型參數(shù)沒有任何關(guān)系。
//換句話說,泛型方法所屬的類是不是泛型類都沒有關(guān)系。
//泛型方法,可以聲明為靜態(tài)的。
// 原因:泛型參數(shù)是在調(diào)用方法時(shí)確定的。并非在實(shí)例化類時(shí)確定。
public static List copyFromArryToList(E[] arr) {
ArrayList list = new ArrayList<>();
for (E e :
list) {
list.add(e);
}
return list;
}
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;
}
//泛型方法
//舉例:獲取表中一共有多少條記錄?獲取最大的員工入職時(shí)間?
public E getValue(){
return null;
}
}
【CustomerDAO.java】:
public class CustomerDAO extends DAO{//只能操作某一個(gè)表的DAO
}
【StudentDAO.java】:
public class StudentDAO extends DAO {//只能操作某一個(gè)表的DAO
}