是否可以使用参数化通用内部类?

用户名
package generics;
public class InnerClassGenerics{
     class Innerclasss{

    }
    public static void main(String[] args) {
        InnerClassGenerics icg=new InnerClassGenerics();
        Innerclasss innerclass=icg.new Innerclasss();
    }
}

上面的代码是可能的,并且可以编译!!!


为什么下面的代码无法编译,并且可以对内部类进行参数化?

package generics;
public class InnerClassGenerics<T>{
    class Innerclasss<T>{

    }
    public static void main(String[] args) {
        InnerClassGenerics<String> icg=new InnerClassGenerics<>();
        Innerclasss<String> innerclass=new Innerclasss<>();
    }
}

在上面的代码中,如果将类设为静态,则可以正常工作!!!为什么没有static关键字是不可能的?

普什莫

通常,如果外部类上没有任何泛型类型,则可以编写如下代码:

Outer outer = new Outer();
Inner inner = outer.new Inner();

因为内部类中的每个方法已经知道应该使用什么类型。

但是,当外部类使用泛型类型时,情况就复杂得多了。由于内部类可以访问其一个或多个外部类的所有成员,因此它还需要了解外部类中使用的泛型类型,以确保在操作泛型值时确保类型安全。

看一下这段代码:

class Outer<T> {
    private T someValue;

    class Inner {
        T getOuterValue(){
            return someValue;
        }
        void setOuterValue(T value){
            someValue=value;
        }
    }
    //rest of code
}

这意味着Inner该类的实例还依赖于其外部类的泛型类型。这就是为什么在创建对内部类的引用时,您需要通过将外部类编写为通用类型来显式地使用外部类

Outer<String> outer = new Outer<>();
Outer<String>.Inner inner = outer.new Inner();
^^^^^^^^^^^^^

或明确地说外部类使用原始类型(不鼓励使用),例如

Outer.Inner inner = outer.new Inner();

因此,要使代码正常工作,您需要:

  1. 添加外部类类型(最好是其泛型类型)

  2. 在外部类的实例上调用内部类的构造函数(就像非静态方法不能在没有实例的情况下调用一样,非静态(内部)类必须使用外部类实例创建)

    InnerClassGenerics<String>.Innerclasss<String> innerclass = icg.new Innerclasss<>();
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 ^^^^
             point 1                                           point 2
    

同样,在这种情况下,不应为嵌套类及其外部类中的泛型类型使用相同的名称

public class InnerClassGenerics<T>{
    class Innerclasss<T>{
        ...
    }
}

因为T来自外部类的Innerclasss 皮革 (不是它会引起当前的问题,但以后可能会使您的生活变得困难)。TInnerClassGenerics

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以使用参数化通用内部类?

来自分类Dev

是否可以使用在其父类(内部类)中实现的类?

来自分类Dev

Android DataBinding可以使用内部类吗?

来自分类Dev

是否可以使用参数化查询执行BACKUP语句?

来自分类Dev

是否可以使用参数化的远程 ip 执行 shell?

来自分类常见问题

是否可以使用由内部宏使用的外部宏参数?

来自分类Dev

是否可以从内部类实例访问外部类实例?

来自分类Dev

是否可以使用不带模板的通用编程?

来自分类Dev

通用可比内部类

来自分类Dev

如何在Scala中实例化Java通用内部类?

来自分类Dev

使用内部类作为类型参数

来自分类Dev

是否可以使用Angular获取元素的内部HTML?

来自分类Dev

是否可以使此方法通用

来自分类Dev

是否可以保证外部类中的静态初始化器在内部枚举初始化之前运行?

来自分类Dev

Python:如何检查是否可以使用可选参数?

来自分类Dev

是否可以使用简单的php获取URL斜线/参数?

来自分类Dev

是否可以使用IF语句调整过程的参数?

来自分类Dev

是否可以使用参数自动生成函数?

来自分类Dev

是否可以使用url参数过滤dbpedia结果?

来自分类Dev

是否可以使用“获取参数”呈现视图?

来自分类Dev

是否可以使用户定义的 KIND 参数全局可用?

来自分类Dev

是否可以使用查询键参数作为变量?

来自分类Dev

是否可以使用 MemoizedSelector 作为 createSelector 的输入参数?

来自分类Dev

内部类的通用数组创建

来自分类Dev

是否可以使用python中__init__的self.variable值初始化方法的参数?

来自分类Dev

继承由内部类型参数化的类

来自分类Dev

JPA中的@Entity是否可以嵌套或内部类?

来自分类Dev

是否可以使用unicode列实例化DataFrame?

来自分类Dev

是否可以使用键列表实例化Map?

Related 相关文章

  1. 1

    是否可以使用参数化通用内部类?

  2. 2

    是否可以使用在其父类(内部类)中实现的类?

  3. 3

    Android DataBinding可以使用内部类吗?

  4. 4

    是否可以使用参数化查询执行BACKUP语句?

  5. 5

    是否可以使用参数化的远程 ip 执行 shell?

  6. 6

    是否可以使用由内部宏使用的外部宏参数?

  7. 7

    是否可以从内部类实例访问外部类实例?

  8. 8

    是否可以使用不带模板的通用编程?

  9. 9

    通用可比内部类

  10. 10

    如何在Scala中实例化Java通用内部类?

  11. 11

    使用内部类作为类型参数

  12. 12

    是否可以使用Angular获取元素的内部HTML?

  13. 13

    是否可以使此方法通用

  14. 14

    是否可以保证外部类中的静态初始化器在内部枚举初始化之前运行?

  15. 15

    Python:如何检查是否可以使用可选参数?

  16. 16

    是否可以使用简单的php获取URL斜线/参数?

  17. 17

    是否可以使用IF语句调整过程的参数?

  18. 18

    是否可以使用参数自动生成函数?

  19. 19

    是否可以使用url参数过滤dbpedia结果?

  20. 20

    是否可以使用“获取参数”呈现视图?

  21. 21

    是否可以使用户定义的 KIND 参数全局可用?

  22. 22

    是否可以使用查询键参数作为变量?

  23. 23

    是否可以使用 MemoizedSelector 作为 createSelector 的输入参数?

  24. 24

    内部类的通用数组创建

  25. 25

    是否可以使用python中__init__的self.variable值初始化方法的参数?

  26. 26

    继承由内部类型参数化的类

  27. 27

    JPA中的@Entity是否可以嵌套或内部类?

  28. 28

    是否可以使用unicode列实例化DataFrame?

  29. 29

    是否可以使用键列表实例化Map?

热门标签

归档