Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用新构造的对象的新构造数组构造对象_Java_Android_Constructor_Null_Adt - Fatal编程技术网

Java 使用新构造的对象的新构造数组构造对象

Java 使用新构造的对象的新构造数组构造对象,java,android,constructor,null,adt,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; } 条的构造函数: int x = 3; int y = 7; int z = 0

好的,我有以下代码:

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;
}
条的构造函数

int x = 3;
int y = 7;
int z = 0;
Bar () {  }
据我所知,这应该是完美的,不言自明的。但是,在
Bar[]
构造函数完成后,我的调试器告诉我
Bar[]
只包含
null
对象。通过使用断点、输出等,我通过构造函数跟踪了程序,并确认
Bar()
工作得非常好,程序中其他地方对
Bar()
的调用的行为符合预期。我还使用已经构建的
Bar()
对象对
Foo(Bar[],Obj)
进行了同样的确认

如果可能的话,我想避免这样做,因为我需要构造超过30个这样的东西,其中大多数需要为每个构造函数提供唯一的参数集——为每个构造函数使用命名变量将是一场可读性噩梦

可能需要注意的是,我直接在类中构造这些对象(不记得具体的术语),而不是在方法中

<>这使我怀疑我误解了java中的这种事情(我更习惯C++,你看)。有人能解释一下这个问题吗


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

根据您提供的信息(我已修复语法错误),这里有一个最小但完整的示例,该示例显示数组具有非空元素。因此,您的问题在于代码的其他部分,这些部分到目前为止还没有显示

它打印
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;
    }
}

你能给我看看吗?您在示例中构造的数组不包含空项,因此问题在其他地方…可能您在构造函数中隐藏了实例变量…@assylias这是一个完整的示例,再现了问题,但
Foo()
Bar()
的构造函数除外,前者创建了
Bar[]
Bar()
的本地副本,后者什么也不做。@ZouZou我不明白你说的“隐藏实例变量”是什么意思@Invictus不是真的-一个完整的示例将包括
Foo
构造函数和相关字段。这可能就是问题所在。关于这一点,我有几个问题:1。我推测
f
是在一个方法内部构造还是仅仅在一个类内部构造没有区别,那么?2.你为什么让这些类是静态的?3.我认为,在Java中,必须实现默认构造函数,而不是将其留给编译器-不是这样吗?(1)不,它不应该产生差异(对于
f.barArr
-当然,它在范围方面确实产生了差异)(2)因为我将它们都放在了测试类中。我也可以让它们成为非静态的顶级类。(3)
public Bar(){}
相当于根本没有构造函数-如果您不需要在构造函数中执行任何特殊操作,那么就不需要构造函数。很高兴知道。不幸的是,我比以往任何时候都更困惑,因为这是可行的,而我的原始代码却不可行。我删除了一些不应该——也没有——对错误发生有任何影响的部分,所以我想我现在需要再次查看这些部分。我不知道其中哪些部分可能是相关的。我应该在问题中发布/链接到我的原始代码吗?@invitus根据您目前提供的信息,很难说得更多。您可以尝试使用中描述的方法来创建一个完整的示例,再现您的问题并发布。