Java泛型接口实现类确定具体类型需据职责与复用需求:业务固定则填死类型,如class UserRepo implements Repository;需适配多种数据则类本身泛型化,如class Cache implements Supplier。

Java 泛型接口实现类确定具体类型,核心是看这个类的职责范围和复用需求:业务固定就填死类型,需要适配多种数据就保留泛型参数。
非泛型实现类:直接在 implements 中写具体类型
当一个类只处理某一种明确的数据(比如所有方法都操作 User 对象),就在实现接口时把类型参数直接写实:
- ✅ 正确写法:
class UserRepo implements Repository - 接口中所有
T都被替换成User,方法签名自动变成User findById(Long)这类形式 - ❌ 不能省略类型写成
implements Repository(退化为原始类型,失去类型检查) - ❌ 不能用通配符写成
implements Repository>(语法不合法,编译失败)
泛型实现类:类本身也带类型参数,与接口对齐
如果这个实现类要支持不同数据类型(比如通用缓存、JSON 转换器),那就让类自己也泛型化,并保持参数名一致:
- ✅ 正确写法:
class Cache,两边都用implements Supplier T - 创建实例时才确定类型:
new Cache或() new Cache() - ❌ 不能写成
class Cache implements Supplier(参数名不一致,编译报错) - 类型安全由编译器全程校验,不是靠运行时判断
子接口继承时:必须当场填实父接口的类型
扩展已有泛型接口时,不能继续留白,得立即明确父接口需要的类型:
- ✅ 允许:
interface UserProcessor extends Processor(已固化) - ❌ 禁止:
interface GenericProcessor(这不是继承,是重新定义一个新接口)extends Processor - Java 不支持“泛型接口的泛型继承”,子接口只能是具体化后的结果
多个泛型接口组合:各填各的,互不影响
一个类可以同时实现多个泛型接口,每个接口的类型实参独立指定:
- 例如:
class UserService implements Repository, Validator , Logger -
Repository和Validator都用User,Logger单独用Event - 没有冲突,也不需要额外声明统一类型变量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











