Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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中的独立(语法上或在单独的文件中)内部类?_Java_Module_Inner Classes - Fatal编程技术网

Java中的独立(语法上或在单独的文件中)内部类?

Java中的独立(语法上或在单独的文件中)内部类?,java,module,inner-classes,Java,Module,Inner Classes,有没有办法在Java中定义独立的内部类 注意:我不需要像C#那样的“局部”类,我需要完整类,但需要内部类 有没有计划在未来的Java中引入这种语法 package tests.java; public class Try_InnerClassStandalone_01 { public static void main(String[] args) { Outer O1 = new Outer(12); Outer O2 = new Outer(13

有没有办法在Java中定义独立的内部类

注意:我不需要像C#那样的“局部”类,我需要完整类,但需要内部类

有没有计划在未来的Java中引入这种语法

package tests.java;

public class Try_InnerClassStandalone_01 {

    public static void main(String[] args) {

        Outer O1 = new Outer(12);
        Outer O2 = new Outer(13);

        Outer.Inner i1 = O1.new Inner();
        System.out.println(i1.getData());

        InnerExt i2 = O1.new InnerExt();
        System.out.println(i2.getData());

    }
}

class Outer {

    class Inner {
        int getData() {
            return data;
        }
    }

    public int data;

    public Outer(int data) {
        this.data = data;
    }
}

class InnerExt extends Outer.Inner {

}
更新

我知道静态和非静态内部类之间的区别。我想利用优点,避免缺点

优点是能够引用
外部。这是隐式的(较短的代码)

缺点是必须将内部类放入外部类定义的边界中(无模块化)。

尝试以下方法:

class Outer {
    static class Inner {
        // ...
    }
}
非静态内部类的实例具有对其封闭类的实例的隐式引用。如果您想要我怀疑的“独立内部类”的含义,您应该使内部类
静态

您不能这样做

class InnerExt extends Outer.Inner {

}
因为
内部
仅在
外部
实例的上下文中相关。不能在
Outer
的上下文之外扩展它。就像你能做的一样

class Outer {
    class Inner {

    }
    class InnerExt extends Inner {

    }
}

否则,您需要使
内部
成为
静态
类。然后,您可以在其可见性范围内扩展它。

为什么?显然,
i1
i2
之间没有区别。在这两种情况下,外部实例都是在构造期间提供的。我不想要静态的,我需要内部和非静态的。我需要隐藏的外部类实例。您想要实现什么?这样做的最重要原因可能是将内部类的实例绑定到外部类的实例。如果在B类实例的上下文中创建的A类实例只能在同一上下文中正确使用,那么A在逻辑上应该是B的内部类。方便地访问B的字段和方法是一个很好的附带好处。我现在正在写一个小的模拟;从逻辑上讲,一堆类应该是内部类,但是有太多的代码要把它们全部放在一个文件中。是的,非静态内部类的实例有一个对其封闭类实例的隐式引用。这就是我想要的。因此,您使用静态类的建议不匹配。重要的是要认识到,
静态
除了独立于外部类(不
外部。此
)之外没有其他含义。您对“独立的内部类”是什么意思?那么我认为您想要的是不可能的;你不能在它的封闭类之外定义一个非静态的内部类。我从来没有听说过在Java的未来版本中包含这个特性的计划,所以我不会指望很快就包含它。请注意,非静态内部类可以直接访问封闭类的成员变量。如果内部类在一个单独的源文件中,这看起来会很奇怪。