public class Father {}
/**
* 子类不保留父类的泛型
* 1) 没有类型擦除
*/
public class Son1 extends Father {
/**
* 等价于 public class Son1 extends Father {}
*/
}
/**
* 2)具体类型
*/
public class Son2 extends Father {}
/**
* 子类保留父类的泛型
* 1) 全部保留
*/
public class Son3 extends Father {}
/**
* 2)部分保留
*/
public class Son4 extends Father{}
package com.liufei.test.myselfTest;
import java.util.ArrayList;
import java.util.List;
public class Order {
String orderName;
int orderId;
/**
* 1. 类的内部构造就可以使用类的泛型
*/
T orderT;
public Order(){
// 编译不通过
// T[] ts = new T[10];
// 编译通过
T[] arr = (T[]) new Object[10];
}
public Order(String orderName,int orderId,T orderT) {
this.orderId = orderId;
this.orderName = orderName;
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 +
'}';
}
/**
* 2. 静态方法中不能使用泛型。
*/
/* public static void show(T orderT) {
System.out.println(orderT);
}*/
/**
* 3. 异常中不能使用泛型
*/
public void show(){
// 编译就不会通过
/* try {
} catch (T t) {
}*/
}
/**
* 泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。
* 换句话说,泛型方法所属的类是不是泛型类都没有关系。
* 4. 泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定。
*/
public static List copyFromArrayToList(E[] arr) {
ArrayList list = new ArrayList();
if (arr != null) {
for (E e : arr) {
list.add(e);
}
}
return list;
}
}
package com.liufei.test.myselfTest;
import java.util.ArrayList;
import java.util.List;
public class SubOrder extends Order { // SubOrder 不是泛型
public static List copyFromArrayToList(E[] arr){
ArrayList list = new ArrayList<>();
if (arr != null) {
for(E e : arr){
list.add(e);
}
}
return list;
}
}
package com.liufei.test.myselfTest;
public class SubOrder1 extends Order {
/**
* SubOrder1:仍然是泛型类
*/
}
5. 泛型实例
package com.liufei.test.java;
import java.util.List;
public class DAO {
/**
* 添加记录
* @param t
*/
public void add(T t) {
}
/**
* 删除记录
* @param t
* @return
*/
public boolean remove(T t) {
return false;
}
/**
* 修改记录
*/
public boolean update(T t) {
return false;
}
/**
* 查询一条记录
*/
public T getIndex(int index) {
return null;
}
/**
* 查询多条记录
* @param index
* @return
*/
public List getForList(int index) {
return null;
}
// 泛型方法
// 举例:获取表中一共有多少条记录?获取最大的员工入职时间
public E getValue(){
return null;
}
}