Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';s泛型、继承和内部静态类编译问题_Java_Android Studio_Generics_Javac - Fatal编程技术网

Java';s泛型、继承和内部静态类编译问题

Java';s泛型、继承和内部静态类编译问题,java,android-studio,generics,javac,Java,Android Studio,Generics,Javac,我有一个奇怪的编译问题,与使用继承的静态内部类作为泛型类型有关 以防万一:每个单独的代码片段都是相同包中的一个独立的类 父外部和父内部: 汇编结果如下: $ javac *.java ChildOuter.java:8: error: cannot find symbol public static class ChildInner extends ParentInner { ^ symbol:

我有一个奇怪的编译问题,与使用继承的静态内部类作为泛型类型有关

以防万一:每个单独的代码片段都是相同包中的一个独立的

父外部和父内部:

汇编结果如下:

$ javac *.java
ChildOuter.java:8: error: cannot find symbol
    public static class ChildInner extends ParentInner {
                                           ^
  symbol:   class ParentInner
  location: class ChildOuter
ChildOuter.java:6: error: type argument ChildInner is not within bounds of type-variable T
public class ChildOuter extends ParentOuter <ChildInner> {
                                             ^
  where T is a type-variable:
    T extends ParentInner declared in class ParentOuter
2 errors
$javac*.java
java:8:错误:找不到符号
公共静态类ChildInner扩展了ParentInner{
^
符号:类ParentInner
地点:ChildOuter类
java:6:错误:类型参数ChildInner不在类型变量T的范围内
公共类ChildOuter扩展ParentOuter{
^
其中T是一个类型变量:
T扩展类ParentOuter中声明的ParentInner
2个错误
注:

  • 当我取消注释
    import com.company.ParentOuter.ParentInner;
    编译成功
  • 当我在
    ChildOuter
    中使用
    而不是
    时,编译成功
  • 问题:

  • 所以,从我看到的情况来看,
    javac
    无法确定, 当它用作 泛型类型

    真的是这样吗?如果是,那么为什么?预期的行为或问题是否在
    javac

  • 此外,Android Studio还将导入
    ParentInner
    突出显示为“未使用的导入”,并在运行“优化导入”时将其删除,这使得代码无法编译

    那么,这又是安卓工作室的问题还是javac的问题呢


  • p.S.我在很长一段时间内都面临着类似的问题,但最终决定发布这个问题


    希望不会重复,因为这是我第一次无法从单一来源或通过分析答案/文章组合找到答案。

    是的,我们可以在不导入“ParentInner”的情况下解决此问题

    根本原因是,编译器无法解析“ParentInner”。因为“ParentInner”是“ParentOuter”的静态成员

    因此,我们可以简单地提到“ParentOuter.ParentInner”,而不是导入“ParentInner”

    请查找经过调整的ChildOuter.java

        package com.company;
    
    import com.company.ChildOuter.ChildInner;
    //import com.company.ParentOuter.ParentInner;
    
    public class ChildOuter extends ParentOuter <ChildInner> {
    
        public static class ChildInner extends ParentOuter.ParentInner {
        }
    }
    
    package.com公司;
    导入com.company.ChildOuter.ChildInner;
    //导入com.company.ParentOuter.ParentInner;
    公共类ChildOuter扩展ParentOuter{
    公共静态类ChildInner扩展了ParentOuter.ParentInner{
    }
    }
    

    如果这有帮助,请告诉我。谢谢

    是的,我们可以在不导入“ParentInner”的情况下解决此问题

    根本原因是,编译器无法解析“ParentInner”。因为“ParentInner”是“ParentOuter”的静态成员

    因此,我们可以简单地提到“ParentOuter.ParentInner”,而不是导入“ParentInner”

    请查找经过调整的ChildOuter.java

        package com.company;
    
    import com.company.ChildOuter.ChildInner;
    //import com.company.ParentOuter.ParentInner;
    
    public class ChildOuter extends ParentOuter <ChildInner> {
    
        public static class ChildInner extends ParentOuter.ParentInner {
        }
    }
    
    package.com公司;
    导入com.company.ChildOuter.ChildInner;
    //导入com.company.ParentOuter.ParentInner;
    公共类ChildOuter扩展ParentOuter{
    公共静态类ChildInner扩展了ParentOuter.ParentInner{
    }
    }
    

    让我知道这是否有帮助。谢谢

    Rajesh,谢谢
    扩展ParentOuter。ParentInner
    修复。它确实编译得很好,我对这个想法没有异议。但有两件事我仍然不完全清楚。首先:为什么指定
    ParentOuter。
    只有在与泛型一起使用时才需要?例如,当我删除泛型时c来自
    ParentOuter
    ChildOuter
    的信息我可以自由编写和编译
    ChildInner扩展ParentInner
    ,等等。第二个问题是为什么IDEA将
    ParentOuter.ParentInner
    删除为冗余,但没有它的代码就不能编译?这是IDEA中的错误吗?Rajesh,谢谢
    扩展ParentOuter.ParentInner
    fix。它确实编译得很好,我对这个想法没有异议。但有两件事我还不完全清楚。首先:为什么指定
    ParentOuter.
    只有在与泛型一起使用时才需要?例如,当我从
    ParentOuter
    ChildOuter
    中删除泛型信息时,我可以自由编写和编译
    ChildInner扩展了ParentInner
    ,等等。第二个问题是为什么IDEA将ParentOuter.ParentInner删除为冗余,但没有它代码就无法编译?这是IDEA中的错误吗?
    $ javac *.java
    ChildOuter.java:8: error: cannot find symbol
        public static class ChildInner extends ParentInner {
                                               ^
      symbol:   class ParentInner
      location: class ChildOuter
    ChildOuter.java:6: error: type argument ChildInner is not within bounds of type-variable T
    public class ChildOuter extends ParentOuter <ChildInner> {
                                                 ^
      where T is a type-variable:
        T extends ParentInner declared in class ParentOuter
    2 errors
    
        package com.company;
    
    import com.company.ChildOuter.ChildInner;
    //import com.company.ParentOuter.ParentInner;
    
    public class ChildOuter extends ParentOuter <ChildInner> {
    
        public static class ChildInner extends ParentOuter.ParentInner {
        }
    }