Java 泛型的继承场景
泛型用法
泛型类/接口:在类/接口后增加关键字"<泛型标识>",申明后该类/接口的具体方法可以使用此标识作为,入参/出参的类型。
泛型方法:在方法访问修饰符后增加关键字"<泛型标识>"。
泛型标识:可以是任意字符串,通常使用单个大写字母表示.可以有多个泛型标识代表不同参数
泛型作用:
编译前编译工具检查
运行过程中自动转换类型
下面主要说明泛型在继承场景下的使用。
父类与接口
子类/实现类可使用 @Override 让编译工具检查是否重写了父类中方法,否则可能是重载了父类方法,导致在使用父类/接口封装业务时出现偏差。
沿用所有泛型
GenericityInterface/GenericityClass 中泛型标识符可以使用任意字符,但个数不能大于实际个数。
SubGenericity1<T, B, A extends Collection>,表示当前类使用三个泛型标识符,T,B,A,标识需要和继承的类/接口保持一致当父类泛型存在限制时子类的泛型需要小于或等于父类中泛型范围,例如父类范围是 Collection,子类可以是 List,但反过来不行。
合并泛型
GenericityClass<T, T>:从上述代码可知泛型申明类似与占位符,只要与父类个数相同即可,标识符一致表示是同一个泛型约束
不使用泛型
继承时不写泛型则表示不继承父类/接口中泛型约束,覆盖方法时使用 Object 代替了泛型约束,类型擦除的一种体现
部分使用泛型
继承时指定类型
通常使用此模式使用泛型
其它-获取运行时类型
在子类需要沿用泛型,且需要创建泛型对应对象时会使用此方法,其中 type.getActualTypeArguments()返回的是该类申明的所有泛型,可能存在多个。
参考资料
https://docs.oracle.com/javase/tutorial/java/generics/types.html
评论