python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Java泛型接口使用

Java中关于泛型接口的使用说明

作者:无奈的码农

这篇文章主要介绍了Java中关于泛型接口的使用说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

什么是泛型接口

泛型接口是在接口类中有一个未知对象,一个可变的对象。

从Java 5开始,引入了参数化类型(Parameterized Type)的概念,改造了所有的Java集合,使之都实现泛型,允许程序在创建集合时就可以指定集合元素的类型,比如List就表名这是一个只能存放String类型的List;

泛型(Generic):就是指参数化类型,上面的List就是参数化类型,因此就是泛型,而String就是该List泛型的类型参数;

泛型的好处 

定义泛型类、接口

不仅Java的集合都定义成了泛型,用户自己也可以定义任意泛型的类、接口,只要在定义它们时用<>来指定类型参数即可;

例如:

public interface SqlInterFace<T> { ... }

其中指定了该泛型的类型参数,这个T是一个类型参数名,用户可以任意命名(就像方法参数的形参名一样),只有在定义该泛型的对象时将T替换成指定的具体类型从而产生一个实例化的泛型对象,一个泛型接口可以被多个类实现,可以减少接口的开发。

例如:

SqlInterFace<BondCode> interFace = new BondCodeService();
SqlInterFace<BondDeal> dealSqlInterFace = new BondDealService();
SqlInterFace<BondDealRecord> bondCodeService = new BondDealRecordService();

实现/继承泛型接口/泛型类

定义泛型和使用泛型的概念:主要区别就是定义和使用

实现/继承一个泛型接口/类的时候

示例:

public class MyType extends MyGeneric { … } // implements、extends的时候必须传入类型实参,因为实在使用泛型!!

原则上,任何编程语言都不允许泛型模板层层继承!!

继承之后,父类/接口中的所有方法中的类型参数都将变成具体的类型,你在子类中覆盖这些方法的时候一定要用具体的类型,不能继续使用泛型的类型形参了

泛型参数继承

class Father<T> { ... }class Son<T> extends Father<T> { ... }

注意:

这里extends Father了,因此父类泛型Father就是被使用了,而按照之前讲的规则,使用给一个泛型是必须要指定类型实参的!

因此这里的这个语法是一种特殊语法,Java专门为这种语法开了后门,这种语法只有在类型参数传承的时候才会用到(即上面这种应用);

一旦使用了这种语法,就表示要进行类型参数的传承了(即父类的T传递给子类继续使用,因此子类也是一个跟父类一样的泛型);

并且一旦使用了这种语法,那么子类定义中的Son和extends Father中的类型参数必须和定义父类时的类型参数名完全一样!!

以下三种情况全部错误(全部发生编译报错):

class Father<T> { }
class Son<E> extends Father<T> { }
class Father<T> { }
class Son<T> extends Father<E> { }
class Father<T> { }
class Son<E> extends Father<E> { }

必须全部使用和父类定义相同的类型参数名(T)!

才行,这是Java语法的特殊规定;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文