Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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 - Fatal编程技术网

Java 模块本地公共方法

Java 模块本地公共方法,java,module,Java,Module,我有一个名为app.gui的模块(Jigsaw),具有以下包层次结构: app.gui app.gui内部: base(GuiElement.java) 控件(SampleControl.java) 布局(SampleControlPane.java) 该模块包含自定义JavaFX节点 问题 我想: 保持包的结构 访问SampleControlPane.java源代码注释(如下)中提到的方法 将方法getRootNode()封装起来,这样它就只能在当前模块中访问 我该怎么做?如果我将

我有一个名为
app.gui
的模块(Jigsaw),具有以下包层次结构:

  • app.gui
app.gui内部:

  • base(GuiElement.java)
  • 控件(SampleControl.java)
  • 布局(SampleControlPane.java)
该模块包含自定义JavaFX节点

问题

我想:

  • 保持包的结构
  • 访问
    SampleControlPane.java
    源代码注释(如下)中提到的方法
  • 将方法
    getRootNode()
    封装起来,这样它就只能在当前模块中访问
我该怎么做?如果我将
getRootNode()
设置为公共,则可以在模块外部访问它

源代码如下:

[GuiElement]是所有自定义节点的父节点

public abstract class GuiElement<T extends Region> {

    private final T rootNode;

    public GuiElement(T rootNode) {
        Objects.requireNonNull(rootNode, "rootNode must not be null");
        this.rootNode = rootNode;
    }

    //Package &S ubclasses API

    protected final T getRootNode() {
        return rootNode;
    }

}
public final class SampleControl extends GuiElement<HBox> {
    
    public SampleControl() {
        super(new HBox());
        getRootNode().getChildren().add(new Button("My Button"));
    }
    
}
public final class SampleControlPane extends GuiElement<VBox> {

    public SampleControlPane(SampleControl... controls) {
        super(new VBox());
        for (SampleControl c : controls) {
            //can't access c.getRootNode() here
        }
    }

}