我有类似的东西:
class Outer {
// a lot of code...
class Inner {
// a lot of code...
}
}
这正是我想要的技术方式(我希望Inner成为嵌套的非静态类)。该文件很长,在这个项目中我经常使用这种模式。为了提高可读性,我想将Outer类和Inner类放在各自的文件中-但我应该将它们分别保留为“ Inner”和“ Outer”(即,将Inner类用作对以下对象的访问权限)外部类,并且可以访问任何字段,包括私有字段。
我想到的一个解决方案是放置一个嵌套接口,并将其继承到另一个文件中。但是,基于this question,看来嵌套接口只能是静态的。
还要注意,此问题不是this one: "putting nested classes in separate files"的重复,因为该问题的目的是使嵌套类不再嵌套。我希望内部类仍然是另一个文件中的内部类。
This question是关于抽象内部类的,但是未指定JVM是否也将该抽象类的子级视为内部子类。
这可能吗?如果是这样,我该怎么办?
答案 0 :(得分:1)
我认为不可能有一个真正的嵌套类,在单独的文件中有两个类。
我想您可以得到的最接近的方法是,声明要以protected
而不是private
访问的“内部”类中的字段。这样,只要它们在同一包中,就可以从“外部”类访问它们。请注意,这意味着包中的其他类也可以访问这些字段。
如果只有外部类可以访问这些字段很重要,我建议您只嵌套内部类。
答案 1 :(得分:1)
据我所知,没有办法在一个单独的文件中包含一个内部类,并使它保持其特权位置。 Java没有#include类型语法。 Java期望单个类“拥有” .java文件,在这种情况下,它是您的外部类。您不能从任何其他.java文件的外部类直接访问内部私有数据或本地变量。
您最好的选择可能是将内部类的各个部分移到其自己的类中,使其抽象化,并尽可能多地转移逻辑。创建一个新的内部类,并使其扩展新的独立类,并使内部类实现需要访问外部类内部的任何内容,而您将无法从外部访问该内部类。
答案 2 :(得分:1)
一种方法是将您的类移到它们自己的包中,其中Outer
类将其要与Inner
类共享的所有成员声明为package private
(无访问权限)修饰符)。
package some.pkg;
public class Outer{
int sharedMember;
// Other field, consturctors methods and so on
}
class Inner extends Outer{
void doSomething(){
int i = super.sharedMember;
// Do something with it
}
}
这是Java源代码中许多类已经完成的工作。您仍然必须使用Outer
扩展到Inner
类,以使其工作