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
实现作为最后一个参数。
但是您的 AbstractNodeValidatorService
以 D
结束:
extends AbstractNodeValidatorService<DP, DeviceAuthorizationEntry, D> //this
D
与C
无关,所以D不能是AbstractNodeValidatorService
的最后一个参数,而是C
类型class。
我在一个复杂的项目中工作,其中有很多扩展和很多泛型。我们用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
实现作为最后一个参数。
但是您的 AbstractNodeValidatorService
以 D
结束:
extends AbstractNodeValidatorService<DP, DeviceAuthorizationEntry, D> //this
D
与C
无关,所以D不能是AbstractNodeValidatorService
的最后一个参数,而是C
类型class。