我不知道这里发生了什么。我做了一个具有成员类的简单应用程序。疯了:为什么数组在成员级别为零
这是我的代码,其行为如预期。这里没什么特别的。主类使用构造函数初始化成员类并调用成员方法。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int array[] = null;
// Init member class
subClass = new SubClass();
subClass.doSomething();
}
和会员类的代码:
package com.example.test;
public class SubClass {
private int[] array;
public SubClass(){
if(array==null){
array = new int[10];
}
}
public void doSomething(){
if(array == null){
// We don't get here, which is good.
}
}
}
但现在我想从一个savedInstanceState传递成员类的阵列,例如。为了保持这个例子简洁而整齐,我只传递一个null值的数组引用。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int[] array = null;
subClass = new SubClass(array);
subClass.doSomething();
}
和会员等级:
package com.example.test;
public class SubClass {
private int[] array;
public SubClass(int[] array){
this.array = array;
// Whatever was passed, I want to make sure we have an array to work with.
if(array==null){
// Yes, it is null so init it.
array = new int[10];
// FROM HERE IT SHOULD BE AN int[10] array AND NOT NULL IN THIS CLASS
// NO MATTER WHAT THE CALLING APPLICATION DOES WITH IT'S PRIVATE
// VARIABLE (no, not parts ;))
}
}
public void doSomething(){
// and now, array should be of 10 length but it isn't!
if(array == null){
// We do get here, which is wrong!
System.out.println("array == null in doSomething");
}
}
}
如果我传递一个有效的数组,像数组=新INT [1],并在构造函数中忽略了什么传递,只是总是初始化为数组= new int [10],在doSomething方法中它又是一个int [1]数组!
谢谢。
问题v.1:我可能是错的,但SubClass中的数组永远不会在构造函数上初始化,因为它不为空,它是空的数组 – 2015-03-13 19:07:59