java - Java接口和类中的多个泛型
问题描述
我正在一个复杂的项目中工作,它有很多扩展和很多泛型。我们使用open jdk 12。
我正在处理的对象是:
public abstract class Node<C extends Node, P extends Property, A extends AuthorizationEntry>
public abstract class Device<D extends Device, DP extends DeviceProperty> extends Node<D, DP, DeviceAuthorizationEntry>
界面:
public interface NodeValidatorService<P extends Property, A extends AuthorizationEntry, C extends Node<C, P, A>>
抽象类:
public abstract class AbstractNodeValidatorService<P extends Property, A extends AuthorizationEntry, C extends Node<C, P, A>> implements NodeValidatorService<P, A, C>
实施:
public class DeviceValidationServiceBean<D extends Device, DP extends DeviceProperty> extends AbstractNodeValidatorService<DP, DeviceAuthorizationEntry, D>
最后一类是未编译的,原因是:
类型参数 D 不在类型变量 C 的范围内
我想知道是否在 DeviceValidationServiceBean 中我无法添加进一步的泛型,或者泛型无法识别即使 D 不直接扩展 Node,它本身也是 Node 本身。你能解释一下我做错了什么,或者不能简单地对泛型进行那种多重扩展吗?
解决方案
你AbstractNodeValidatorService
被声明为最后一个扩展:
C extends Node<C, P, A>> implements NodeValidatorService<P, A, C>
所以它期望一个C
实现作为最后一个参数。
但是你AbstractNodeValidatorService
正在完成一个D
:
extends AbstractNodeValidatorService<DP, DeviceAuthorizationEntry, D> //this
D
与 无关C
,因此 D 不能是 的最后一个参数AbstractNodeValidatorService
,而是C
类型类。
推荐阅读
- python - Python 从标准输入读取 XML
- pandas - 使用 .join 加入索引时的 NaN
- css - 元素或其父项中没有类的选择器
- php - WordPress WooCommerce 产品属性 set_visible false via functions.php 不会永久存储
- python - pyqt5 中的可拖动 QLabels
- c# - 参数NullException
- plotly - Plotly:在散点图中的数据点上显示列值
- react-native - ReactNative如何禁用点击抽屉菜单项
- assembly - 如何在有限指令的汇编中将正数转换为负数?
- php - 在数组 laravel 中创建数组以获取坐标