相关的通用类型但不兼容

时间:2013-07-31 22:01:27

标签: java generics

仍然试图掌握泛型概念...... 这条线

public interface FileStructure<L extends FileStructureLevel<L>, R extends FileStructureResource> extends NodeStructure<L, R>

给出以下信息:

type argument L#1 is not within bounds of type-variable L#2
  where L#1,L#2 are type-variables:
    L#1 extends FileStructureLevel<L#1> declared in interface FileStructure
    L#2 extends NodeStructureLevel<L#2> declared in interface NodeStructure

现在,这似乎微不足道,因为类型边界不同。然而,令人困惑的是,实际上,我只是缩小了界限,因为

public interface FileStructureLevel<E extends FileStructureLevel> extends NodeStructureLevel<FileStructureLevel>

所以无论L1是什么,它肯定会扩展L2。 为什么不匹配?任何人吗?

此外,鉴于声明

public interface NodeStructure<L extends NodeStructureLevel<L>, R extends NodeStructureResource>

public class FileStructureResource implements NodeStructureResource<File>

为什么第一行不会产生与R相关的类似错误,如下所示:

type argument R#1 is not within bounds of type-variable R#2
  where R#1,R#2 are type-variables:
    R#1 extends FileStructureResource declared in interface FileStructure
    R#2 extends NodeStructureResource declared in interface NodeStructure

1 个答案:

答案 0 :(得分:2)

更改您的代码

public interface FileStructureLevel<E extends FileStructureLevel>
    extends NodeStructureLevel<FileStructureLevel>

public interface FileStructureLevel<E extends FileStructureLevel>
    extends NodeStructureLevel<E>

每个人都会很开心。根据{{​​1}}的要求,FileStructureLevel<L> <{1}} NodeStructureLevel<L>,而是NodeStructureNodeStructureLevel<FileStructureLevel>。这就是编译器试图告诉你的。