如何正确搭配sealed类与泛型,消除原生类型警告和绑定不匹配错误
解决方法
错误根源
sealed类的permits子句语法要求仅能罗列许可的子类类名,不允许附带任何泛型参数,你之前两次修改都违反了该语法要求,同时父类无界的泛型T也无法匹配子类对泛型的上界约束,因此直接抛出边界不匹配错误。- 初始代码的警告来源于两处:一是子类继承
Parent时没有给泛型类传入参数,使用了原始类型;二是泛型参数约束不匹配。
正确代码实现
// 父类:permits后仅写子类名,不需要加泛型参数 public abstract sealed class Parent<T> permits ChildA, ChildB {} // 子类:继承时参数化Parent,用自身的泛型T填充父类的泛型参数 public non-sealed class ChildA<T extends FileTypeA> extends Parent<T> {} public non-sealed class ChildB<T extends FileTypeB> extends Parent<T> {}
优化建议(可选)
如果FileTypeA和FileTypeB有共同的父类或实现的公共接口,可给Parent的泛型添加上界,进一步增强类型安全性:
// 假设FileTypeA、FileTypeB均继承自FileType public abstract sealed class Parent<T extends FileType> permits ChildA, ChildB {}
上述修改可直接消除所有警告和编译错误。
内容的提问来源于stack exchange,提问作者khateeb
相关产品推荐
相关产品推荐

