Java中的独立(语法上或在单独的文件中)内部类?
有没有办法在Java中定义独立的内部类 注意:我不需要像C#那样的“局部”类,我需要完整类,但需要内部类 有没有计划在未来的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
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的未来版本中包含这个特性的计划,所以我不会指望很快就包含它。请注意,非静态内部类可以直接访问封闭类的成员变量。如果内部类在一个单独的源文件中,这看起来会很奇怪。