gpt4 book ai didi

Java 嵌套类型场景

转载 作者:行者123 更新时间:2023-11-30 08:38:20 26 4
gpt4 key购买 nike

我正在尝试考虑一种情况,我可能需要在另一个类中声明一个非静态内部类型(类)(除了下面讨论的情况),让我们考虑以下代码

public class OuterClass {

public int OuterMember;

public static class StaticInner{
public int x;
}

public class NonStaticInner{
public int x;
public int y = OuterMember; // none static nested type can access parent members
}

public NonStaticInner getNonStaticInner(){
return new NonStaticInner();
}
}

public class TestClass {
public OuterClass.StaticInner staticObject = new OuterClass.StaticInner();
public OuterClass outer = new OuterClass();
public OuterClass.NonStaticInner nonStaticObject = outer.getNonStaticInner();

public TestClass()
{
nonStaticObject.y = 5;
nonStaticObject.x = 7;
staticObject.x = 2;
}
}

现在我的问题是:如果我不需要 nonStaticObject 内部的闭包,或者换句话说,如果我不需要从 NonStaticInner 内部访问“OuterMember”,那么将 NonStaticInner 声明为非静态是否有任何值(value)?毕竟我可以根据需要创建任意数量的 NonStaticInner 或 StaticInner 实例,除了对于 StaticInner 我不需要“OuterClass”的实例

最佳答案

在 Java 中创建内部(即非静态嵌套)类的原因是将其绑定(bind)到包含实例,例如访问外部实例的成员。例如,AWT/Swing 中的事件处理程序通常被声明为内部类实例,使它们能够访问其处理事件的 JPanel 的实例成员。在 lambda 之前,内部类经常用作仿函数类型,而今天 lambda 经常转换为内部类。

很明显,当一个类需要访问其包含类型的成员时,它应该是一个内部类。当你声明一个静态嵌套类时,它应该是一个嵌套类不太清楚。毕竟,它就像一个顶级类(“公共(public)”或默认访问)一样工作。那么为什么不让它成为顶级类(class)呢?答案是您认为嵌套类型与包含类型的功能绑定(bind)得太紧,不值得提升到顶层。通常这意味着包含类型需要嵌套类型,但没有其他人需要也永远不会。

关于Java 嵌套类型场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36610967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com