在java中自动构造对象

时间:2014-08-28 10:33:51

标签: java android oop

  

[编辑]

     
    

如果删除RolloParser中的getter,问题就解决了。但为什么     getter方法使类自动构造?

  

我有一个名为RolloParser的课程,你可以在下面看到。我使用这个类来解析资产文件夹中的JSON文件。

问题是当我在我的应用程序类中检查此类不是null时,我发现RolloParse已经构建完毕。我想知道为什么?

第7行永远不会有效,但解析器对象不为空。

应用类方法

1- private RolloParser parser=null;
2- public RolloParser getRolloParser(){
3-
4-  //in first run, parser object is not null ???
5-
6-  if(parser == null){
7-     parser = new RolloParser(mContext);
8-  }
9-      
10-  return parser;
11- }

Parser Class

import java.io.IOException;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.util.Log;

public class RolloParser  {

    private String path ="www/android-device/rollo.json";
    private String extension =".ttf";
    private HashMap<String, String> iconMap;
    private HashMap<String, String> fontMap;

    public RolloParser(){
        System.err.println();
    }

    public RolloParser(Context context) {
        try {
            iconMap = new HashMap<String, String>();
            fontMap = new HashMap<String, String>();

            JSONObject objTop;
            try {
                objTop = new JSONObject(AndroidUtils.ReadFromfile(path, context));

                String fonts = objTop.getString("fonts");

                JSONObject objFonts = new JSONObject(fonts);
                JSONArray icons = objFonts.getJSONArray("icons");
                JSONArray others = objFonts.getJSONArray("others");


                for (int i = 0; i < icons.length(); i++) {
                    JSONObject objIcon = new JSONObject(others.get(i).toString());
                    iconMap.put(objIcon.get("family").toString(),objIcon.get("file").toString()+extension);
                };

                for (int i = 0; i < others.length(); i++) {
                    JSONObject objIcon = new JSONObject(others.get(i).toString());
                    fontMap.put(objIcon.get("family").toString(),objIcon.get("file").toString()+extension);
                }

                for (int i = 0; i < others.length(); i++) {
                    Log.d("json", others.get(i).toString());
                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }


    public HashMap<String, String> getIconMap() {
        return iconMap;
    }

    public HashMap<String, String> getFontMap() {
        return fontMap;
    }
}

1 个答案:

答案 0 :(得分:0)

你一定是在调用getRolloParser()方法进行初始化。要确保在getRolloParser中设置一个断点并检查解析器是否为null然后它会得到 初始化