本文介绍了静态嵌套类作为泛型类型绑定不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

文件 AbstractContainer.java

 包容器; 

import static container.AbstractContainer。*;

公共抽象类AbstractContainer< ElementType extends AbstractElement> {
public static abstract class AbstractElement {
}
}

文件 ConcreteElement.java

 包容器; 

导入静态容器.ConcreteContainer。*;
import static container.AbstractContainer。*;

public class ConcreteContainer extends AbstractContainer< ConcreteElement> {
public static class ConcreteElement extends AbstractElement {
}
}

这段代码给了我一个编译错误:

  java:type参数container.ConcreteContainer.ConcreteElement不在类型变量的范围内ElementType 

但IDE没有发现任何问题(IDEA 12)。



第一:这是怎么回事?第二个问题,在 AbstractContainer.java 中,为什么我有静态导入嵌套类,这显然是在范围内,以泛型类型使用它( extends AbstractElement 而不是 extends AbstractContainer.AbstractElement
$ b $

解决方案

第二个问题 - 可能是由于技术性原因:

For example

@SomeAnnotation(M.class)
class C
<T extends M>
{
    static class M{}
}

the code is illegal, because M is used outside the body of C, in annotation, and in type parameter.

Prior to Java 5, there's no annotation/generics, therefore "the entire body of C" covers all places "M" can be sensibly referenced. But now the rule is outdated, we should really extend the scope of M a little bit; I don't see any problem in doing that.

这篇关于静态嵌套类作为泛型类型绑定不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 13:20