使用for循环创建多个对象

时间:2011-05-20 14:22:42

标签: java android

我想要的是在for循环中创建多个视图 示例

for(int i =1; i<5; i++){
GridView view = new Gridview(this);
}

但是它创建了5个具有相同名称的gridview ..所以将来我不能为特定的gridview设置不同的选项。我如何获得,在循环中创建的gridivew获取视图+我的名字

6 个答案:

答案 0 :(得分:5)

使用列表

List<GridView> views = new ArrayList<GridView>();
for(int i = 1; i < 5; i++) {
    views.add(new GridView(this));
}

然后您可以使用

获取您的观点
views.get(i);

答案 1 :(得分:4)

此外,在您的示例中,当for循环的步骤结束时,对该对象的引用将丢失,因为它们的创建范围将保留。在没有引用对象的情况下,垃圾收集器进入并释放该内存,删除对象。

因此,您甚至无法访问最后创建的对象。如果您修改这样的代码,在此代码的末尾您将只实例化最后一个对象:

GridView view;
for(int i =1; i<5; i++){
    view = new Gridview(this);
}

现在,该对象存在于您在代码段末尾的范围内。但实际上只存在一个对象。

因此,解决方案是将对象存储在一些额外的结构中:如果您准确知道所需的对象数量,或者某些自动动态分配的集合结构,则可以使用数组。你在其他答案中都有两个例子。


已添加:您实际要求的内容(动态构建对象的引用名称)称为元编程。我不知道Java是否可行,但这里有一个在PHP中完成的例子:

class Object {
    function hello(){
        echo "Hello \n";
    }
}

for($i =1; $i<5; $i++){
    $name = "view".$i;
    $$name = new Object();
}

$view1->hello();
$view2->hello();
$view4->hello();

以下是可运行的代码:http://codepad.org/bFqJggG0

答案 2 :(得分:3)

使用List GridViews

List<GridView> grids = new ArrayList<GridView>();
for(int i =1; i<5; i++){
    grids.add(new Gridview(this));
}

答案 3 :(得分:2)

我认为这段代码会创建5个GridViews,其中4个将立即可用于垃圾收集,因为您的代码不再具有对它们的引用。

如果你在循环中创建它们,那么我想我会将它们存储在数据结构中,例如List或Map,然后通过索引或键访问它们。

答案 4 :(得分:0)

我认为你可以这样做:

for(int i =1; i<5; i++){
GridView view = new Gridview(this);
view.setId(i);
}

然后,您可以区分所有视图

答案 5 :(得分:0)

GridView[] view=new GridView[5];
for(int i=1;i<5;i++){
view[i]=new GridView(this);}

现在我认为你可以设置指定的选项。