之前都是 使用过 数据结构,指定泛型 , 今天做个梳理
泛型接口
泛型方法
泛型类
package javabasis.fanxing;
//参考文章
//https://blog.csdn.net/s10461/article/details/53941091
//码出高效
import org.junit.Test;
//泛型 (参数化类型)
//主要用于 非固定类型参数 的传入传出, 在编译器 能有效对类型进行校验,避免再运行期
/*
*
* 主要有三种方式使用
*
* 方法泛型
* 接口泛型
* 类泛型
*
* 以下为使用例子及描述
* */
//泛型方法
/*
* 泛型方法的使用
*
* 主要是 可以接收多种类型参数,也返回此种类型参数
*
* 如果声明入参为Object 出参为Object的话,也可以实现,但是接收时需要强制类型转换
*
* */
class FanXing {
public Integer deal(Integer i) {
return i;
}
public Object newDeal1(Object o) {
return o;
}
//此处的<T> 才是泛型方法声明
public <T> T newDeal2(T t) {
return t;
}
}
public class NO3FanXing {
//泛型方法
@Test
public void test() {
Integer i = 1;
Double j = 0.11;
FanXing fanXing = new FanXing();
Integer result1 = fanXing.deal(i);
//fanXing.deal(j);会报异常
//需要强制类型转换,不安全,容易出现异常
Double result2 = (Double) fanXing.newDeal1(j);
//不需要强制类型转换
Double result3 = fanXing.newDeal2(j);
}
}
//-------------------------------------------------------
/*泛型类使用*/
/*
* 此处声明为 泛型类, T指代各种类型, K V E T都可以
* */
class FanXingClassDemo<T> {
private T param;
public FanXingClassDemo(T param) {
this.param = param;
}
//此处的T 非泛型方法, 仅仅是根据 泛型类定义的泛型进行操作
public T getParam() {
return param;
}
public void setParam(T param) {
this.param = param;
}
@Test
public void test() {
FanXingClassDemo<Integer> fanXingClassDemo = new FanXingClassDemo<Integer>(4545);
// fanXingClassDemo.setParam("dsfasdfsf");
// 抛出异常: 'setParam(java.lang.Integer)' in 'javabasis.fanxing.FanXingClassDemo' cannot be applied to '(java.lang.String)'
//实现对放入参数类型做校验
FanXingClassDemo<String> fanXingClassDemo2 = new FanXingClassDemo<String>("dsfasdfsf");
//放入其他类型,需要重新制定泛型类型
//想要实现 父类子类之间的 泛型类型制定, 可以使用通配符,会单独进行整理
}
}
//--------------------------------------------------------------
/*
*
* 泛型接口的使用
* 在实现类中有两个用法
*
*/
interface FanXingInterFace<T> {
public T getParam();
public T setParam();
}
//注意此处 后边也要写<T>,是一个泛型类
class FanXingInterFaceImpl<T> implements FanXingInterFace<T> {
@Override
public T getParam() {
return null;
}
@Override
public T setParam() {
return null;
}
}
//注意此处不用再进行声明<T>, 接口中已经指定了泛型类型
class FanXingInterFaceImpl2 implements FanXingInterFace<String> {
@Override
public String getParam() {
return null;
}
@Override
public String setParam() {
return null;
}
}