用新构造的新构造数组构造一个对象

时间:2014-05-13 14:44:37

标签: java android constructor null adt

好的,我有以下代码:

Foo f = new Foo (
  new Bar[] {
    new Bar(),
    new Bar(),
    new Bar()
  }, new Bar()
};

Foo的构造函数:

Bar[] barArr = new Bar[];
Bar barLoc;
Foo(Bar[] arr, Bar b)
{
  barArr = arr;
  barLoc = b;
}

Bar的构造函数:

int x = 3;
int y = 7;
int z = 0;
Bar () {  }

根据我的理解,这应该是完全正确和不言自明的。但是,在Bar[]构造函数完成后,我的调试器会告诉我Bar[]仅包含null个对象。使用断点,输出等,我通过构造函数跟踪程序并确认Bar()完全正常工作,这得到了程序中其他位置Bar()的调用如何按预期运行的支持。我还使用已构造的Foo(Bar[], Obj)对象确认了Bar()的相同内容。

我想尽可能避免这样做,因为我需要构造>这些东西中的30个,其中大多数需要每个构造函数的唯一参数集 - 使用每个构造函数的命名变量将是可读性的噩梦。

值得注意的是,我正在一个班级中直接构建这些对象(不要记住这个对象的特定术语),而不是在一个方法中。

这让我怀疑我误解了这种东西在Java中的作用(我更习惯于C ++,你看)。有人可以对这个问题有所了解吗?

我正在使用ADT并开发Android 4.3。

1 个答案:

答案 0 :(得分:0)

这是一个基于您提供的信息(我已修复语法错误)的最小但完整的示例,该示例显示数组具有非null元素。因此,您的问题出现在您目前尚未展示的代码的其他部分。

打印package.name.Test$Bar@15db9742

public static void main(String[] args) throws Exception {
    Foo f = new Foo(
            new Bar[]{
                new Bar(),
                new Bar(),
                new Bar()
            }, new Bar());
    System.out.println(f.barArr[0]);
}

static class Bar {
    int x = 3;
    int y = 7;
    int z = 0;
}

static class Foo {
    Bar[] barArr;
    Bar barLoc;

    Foo(Bar[] arr, Bar b) {
        barArr = arr;
        barLoc = b;
    }
}