我在哪里放置我的getter功能?

时间:2015-01-04 00:14:54

标签: java getter-setter

下面的类是一个上下文构建器,它将Tree对象放置在网格上的地理空间中。我创建了一个具有各种适用性值和id的树对象的数组列表:

public class TreeBuilder implements ContextBuilder<Object> {


@Override
public Context build(Context<Object> context) {
    context.setId("taylor");

    ContinuousSpaceFactory spaceFactory = 
    ContinuousSpaceFactoryFinder.createContinuousSpaceFactory(null);
    ContinuousSpace<Object> space = 
    spaceFactory.createContinuousSpace("space", context, 
            new RandomCartesianAdder<Object>(), 
            new repast.simphony.space.continuous.WrapAroundBorders(), 
            50, 50);


    GridFactory gridFactory = GridFactoryFinder.createGridFactory(null);
    Grid<Object> grid = gridFactory.createGrid("grid", context, 
            new GridBuilderParameters<Object>(new WrapAroundBorders(), 
            new SimpleGridAdder<Object>(), 
            true, 50, 50));

    ArrayList<Tree> trees = new ArrayList<Tree>();

    int treeCount = 100;
    for (int i = 1; i < treeCount; i++) {
        double suitability = Math.random();
        int id = i;


    Tree tree = new Tree(space, grid, suitability, id);
    context.add(tree);
    trees.add(tree);



    tree.measureSuit();

    }

    Tree maxTree = Collections.max(trees, new SuitComp());
    System.out.println(maxTree);

    for (Object obj : context) {
        NdPoint pt = space.getLocation(obj);
        grid.moveTo(obj, (int)pt.getX(), (int)pt.getY());

    }


    return context; 

}


}   

我相信我可以使用getter来访问其他类中的列表。像这样......

public ArrayList<Tree> getList() {
return trees;
}

但我的问题是:我在哪里放上代码?每当我放置它时都会出错,特别是“返回树”;

另外:我还可以使用getter从列表中获取maxTree值吗?

1 个答案:

答案 0 :(得分:3)

不在此背景下。

一个人通常使用吸气剂来进入田地; trees在方法build中声明为局部变量。这意味着每次调用它时,都会得到一个新列表,一旦从方法返回它就不再存在。

如果你真的想存储树木清单(我不确定你为什么要这样做),你必须把它移到一个字段声明中:

private List<Tree> trees = new ArrayList<>();

maxTree值存在类似问题;如果你想存储它,并且 看起来像是与你的实例保持合理的东西,那么你也必须将它移动到一个字段。它并不像上面的声明那么简单,因为你只知道该方法的值是什么,但它的调用不应该比它复杂得多。我将此作为练习留给读者。