在函数外,类变量数组在java中返回null

时间:2013-11-15 12:13:58

标签: java

在我的java类中,我将一个类声明为数组,在函数中我将值赋给类的数组,但是在类的函数中它返回null。如何访问类数组。

声明的数组变量类是java(https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Marker

中的inbuild final类

代码示例:

    public class Sample{

        Marker redMarker[]; // Marker is the public final class 

   // https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Marker

        void function1(){
            for(int i=0;i<array.length;i++){
                redMarker[i] = map.addMarker(.......);
            }   
        }       

        void function2(){
           if(condition){
                if(redMarker!=null){
                    for(int i=0;i<array.length;i++){
                    redMarker[i].setVisible(false);
                    }   
                }
                else{
                    // here I get redMarker is Null.
                }
           }
        }
    }

6 个答案:

答案 0 :(得分:3)

您需要先初始化数组

Marker redMarker[]; 

这样的东西
Marker redMarker[] = new Marker[someSize];

然后添加值

for (int i = 0; i < someSize; i++){
    redMarker[i] = new Marker();
}

答案 1 :(得分:3)

redMarker是数据成员,除非您在构造函数或内联中​​初始化它,否则它的值默认为null

E.g:

public class Sample{
    Marker redMarker[];

    public Sample(int numOfMarkers) {
        redMarker = new Marker[numOfMarkers];
    }

答案 2 :(得分:2)

由于您的方法不是静态的,因此您需要一个构造函数来执行以下操作:

public Sample() {
    redMarker = new Marker[<put the length in here];
}

答案 3 :(得分:2)

你应该声明标记redMarker [];数组大小

修改你的function2(),如下所示。

    void function1(){
       if(condition){
            if(redMarker!=null){

            }
            else{
                redMarker = new Marker[array.length]; // added this line of code.
            }
       }
    }

修改你的function1(),如下所示。

 void function1(){
        if(redMarker ==null){
             redMarker = new Marker[array.length]; // added this line of code.
        }
        for(int i=0;i<array.length;i++){
            redMarker[i] = map.addMarker(.......);
        }   
    }       

答案 4 :(得分:0)

如果您正在测试if(redMarker!=null),那么只有当redMarker实际上是else时才会执行null块。

一切都在运作,故障可能在你的逻辑中。

答案 5 :(得分:0)

检查function1是否仍然为空?

如果是,那么你还没有初始化你的redMarker