首页 > 解决方案 > 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 本身。你能解释一下我做错了什么,或者不能简单地对泛型进行那种多重扩展吗?

标签: javaopenjdk-12

解决方案


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类型类。


推荐阅读