从另一个类访问实例变量

时间:2012-05-13 02:38:38

标签: java permissions instance

如果您想直接解决问题,请跳过此段落。作为实践,我正在尝试编写一个模拟经济的Java程序,并为此编写了一个公司类。他们的想法就是拥有十几个,将他们的收入换成正常的变量函数,这就是经济。

我写了一个单独的类来使用JFreeChart来绘制公司的输出。但是,我无法从图形类中访问每年写入金额的ArrayList。我知道这样做的最佳方式可能是吸气剂,但它似乎没有用,所以如果这是你的建议,请你提供一个例子吗?谢谢!

公司:

public class ServiceProvider implements Company {
    //Variables


    public ArrayList getRecords(){
        return records;
    }

    public ServiceProvider(){
        money = 10000;
        yearID = 0;
        goodYears = 0;badYears = 0;
        records = new ArrayList();
        id++;
    }

    public void year() {
        yearID++;
        if(!getBankrupt()){
            spend();
        }
        writeRecords();
    }

    public void spend() {
        ...
    }

    public void printRecords() {
        for(int i=0;i<records.size();i++){
            String[] tmp = (String[]) records.get(i);
            for(String a:tmp){
                System.out.print(a+" ");
            }
            System.out.print("\n");


        }

    }

    public void writeRecords(){
        String[] toWrite = new String[2];
        toWrite[0] = String.valueOf(yearID);
        toWrite[1] = String.valueOf(money);
        records.add(toWrite);
    }

    public void writeRecords(String toWrite){
        String temp = "\n"+yearID+"   "+toWrite;
        records.add(temp);
    }

    public boolean getBankrupt(){
        boolean result = (money < 0) ? true : false;
        return result;
    }


}

我想从以下网址访问它:

public class grapher extends JFrame {
    ArrayList records = s.getRecords();

    public grapher(){
        super("ServiceProvider");
        final XYDataset dataset = getCompanyData();
    }



    private XYDataset getCompanyData(){
        XYSeries series;
        for(int i=0;i<s.getRecords().length;i++){ //S cannot be resolved, it's instantiated in the main class.

        }
    }

}

主要班级:

public class start {

    public static void main(String[] args) {
        ServiceProvider s = new ServiceProvider();
        for(int i=0;i<10;i++){
            s.year();
        }
        s.printRecords();

    }

}

P.S。不要告诉我记录是多么糟糕。我知道。

3 个答案:

答案 0 :(得分:0)

ServiceProvider的实例作为参数传递给grapher构造函数,然后它可以将其作为参数传递给getCompanyData()

由于实例是在grapher类之外创建的,因此grapher无法使ServiceProvider实例使用,除非您将该实例移交给{{1} }}

BTW,请确保您对grapher ArrayList中的grapher所做的一切都不做改变。如果你这样做,你将在ServiceProvider中进行更改(因为它只是对同一底层ArrayList的引用)。这可能不是你想要做的。如果您确实需要更改它,请复制并使用该副本。

答案 1 :(得分:0)

你的grapher课程应该如下

public class grapher extends JFrame {

    public grapher(ServiceProvider s){
        super("ServiceProvider");
        final XYDataset dataset = getCompanyData(s);
    }


    private XYDataset getCompanyData(ServiceProvider s){
        XYSeries series;
        for(int i=0;i<s.getRecords().length;i++){ 
                  // Do Process of business logic.   
        }
    }

}

答案 2 :(得分:0)

您的grapher类正在尝试使用start类中的变量(您正在调用存在于start类中的变量s),而不会引用该变量。为了让grapher访问该实例,您必须将它作为构造函数中的参数传递给grapher类:

public grapher(ServiceProvider serviceProvider) {
     records = serviceProvider.getRecords();
}

在getCompanyData方法中,使用类变量记录而不是s。