Java 接口中的多个泛型和 类

Java multiple generics in interface and classes

我在一个复杂的项目中工作,其中有很多扩展和很多泛型。我们用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>>

摘要class:

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>

最后一个 class 没有编译,原因是:

type argument D is not within bounds of type-variable C

我想知道是否在 DeviceValidationServiceBean 中我不能添加进一步的泛型,或者如果泛型无法识别即使 D 不直接扩展节点,它本身仍然是一个节点。 你能解释一下我做错了什么,或者如果不能简单地对泛型进行那种多重扩展吗?

您的 AbstractNodeValidatorService 声明为最后一个扩展:

 C extends Node<C, P, A>> implements NodeValidatorService<P, A, C>

所以它期望 C 实现作为最后一个参数。

但是您的 AbstractNodeValidatorServiceD 结束:

extends AbstractNodeValidatorService<DP, DeviceAuthorizationEntry, D> //this

DC无关,所以D不能是AbstractNodeValidatorService的最后一个参数,而是C类型class。