在整个项目中对象及其成员的可见性

时间:2018-04-14 11:50:47

标签: java visibility

我对编程很新,我很难理解从哪里可以访问对象/方法。

我有一个班级

public class ShippingLine {

    ArrayList<Ship> shipList;
    ArrayList<Port> portList;
    String fileName;
    ContainerHandler containerHandler;

    public ShippingLine() {

        this.shipList = new ArrayList<Ship>();
        this.portList = new ArrayList<Port>();
        this.fileName = "container.csv";
        this.containerHandler = new ContainerHandler();

    }
public ArrayList<Ship> getShipList() {
    return this.shipList;
}


} 

并且在main中我创建了一个新的ShippingLine()对象shippingLine。

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ShippingLine shippingLine = new ShippingLine();

我现在尝试从以下类方法distributeContainers()

访问对象shippingList中的ArrayList shipList
import java.io.File;

import java.util.ArrayList;
import java.util.Scanner;

public class ContainerHandler {

    ArrayList<String[]> dataArr = new ArrayList<String[]>();
    ArrayList<Container> containerArr = new ArrayList<Container>();
    String[] csvLine;
    String fileName;

    public void readContainerFile(String fileName) {


        this.fileName = fileName;
        try {

            File containerFile = new File(fileName);

            Scanner containerScanner = new Scanner(containerFile);

            int i = 0;
            while (containerScanner.hasNextLine()) {
                dataArr.add(
                        ("container " + i + ";" + containerScanner.nextLine() + ";" + IdHandler.getId()).split(";"));
                i++;

            }

            containerScanner.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        for (int i = 1; i < dataArr.size(); i++) {

            containerArr.add(new Container(dataArr.get(i)[1], dataArr.get(i)[2], Integer.parseInt(dataArr.get(i)[3]),
                    dataArr.get(i)[5]));

        }

    }

    public void distributeContainers() {

        for(Container container : containerArr ){

        }

    }

}

我不明白为什么我无法从同一个包中的其他类访问它。是一个问题,一个是对象内部的对象而另一个不是?有人可以帮我吗?我大约一个月前才开始。 谢谢!

1 个答案:

答案 0 :(得分:0)

只能通过实例访问实例方法。由于ContainerHandler没有ShippingLane实例,因此无法访问任何ShippingLane的实例方法和/或实例字段

看起来ContainerHandler会创建一些ShippingLane需要保留的数据。 ShipLane不是给ContainerHandler一个ShippingLane实例,而是告诉ContainerHandler创建数据并将其返回到ShippingLane,而ShippingLane可以将其放入其发货清单中。这样ContainerHandler就不需要了解任何有关ShippingLane的信息,而且还会封装ShippingLane的详细信息。