1、泛型类、泛型接口、泛型方法
注意细节:
什么时候需要自定义泛型呢?
2、代码
package com.generic;
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 String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
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 +
'}';
}
}
子类一
package com.generic;
//有指明子类的泛型
public class SubOrder extends Order<Integer> {
}
子类二
package com.generic;
//没有指明子类的泛型
public class ExtenOrder<T> extends Order<T> {
}
测试类:
package com.test;
import com.generic.ExtenOrder;
import com.generic.Order;
import com.generic.SubOrder;
import org.junit.Test;
public class TestMyGeneric {
@Test
public void test(){
//如果定义了泛型,实例化没有指明类的泛型,则认为此泛型类为Object类型
//Order order = new Order();
//不建议使用
Order<String> order = new Order<String>();
order.setOrderName("Tom");
order.setOrderId(1234);
//报错,编译不通过
// order.setOrderT(13);
order.setOrderT("Zhou");
System.out.println("Order 类的测试:");
System.out.println(order);
System.out.println("Order类指明子类泛型测试");
//指明子类的泛型
//此处不需要再指明
SubOrder subOrder = new SubOrder();
subOrder.setOrderId(1235);
subOrder.setOrderName("Bob");
//该值只能是指定后的整形
subOrder.setOrderT(45);
System.out.println("Order类没有指定子类泛型测试");
//没有指明子类的泛型
//此处需要指明
ExtenOrder<Float> order1 = new ExtenOrder<Float>();
order1.setOrderT((float) 12.1);
order1.setOrderId(12458);
order1.setOrderName("Jack");
System.out.println(order1);
}
}
运行结果:
Order 类的测试:
Order{orderName='Tom', orderId=1234, orderT=Zhou}
Order类指明子类泛型测试
Order类没有指定子类泛型测试
Order{orderName='Jack', orderId=12458, orderT=12.1}