如何在ArrayList中设置值

时间:2014-11-25 13:18:49

标签: java list arraylist

我正在创建ArrayList类型B

ArrayList<B> cert= new ArrayList<B>;
B a  = util.getCerts(path).iterator().next();
this.cert.add(a);
this.certNode(certs);

当我尝试设置值时,我得到一个空指针异常:

void certNode(ArrayList<B> certResp) 
{       
    ArrayList<RespNode> exp = new ArrayList<RespNode>();
    for (int i = 0; i< certResp.size(); i++) {  
        exp.get(i).setxxx(certResp.get(i).getxxx());
        exp.get(i).setxxx(certResp.get(i).getxxx().toString());     
    }
 }

任何帮助都会很棒!

5 个答案:

答案 0 :(得分:2)

由于您刚刚创建了ArrayList实例expexp.get(i)不存在,因此您无法调用exp.get(i).setxxx(...)

编辑:

尝试:

void certNode(ArrayList<B> certResp) {      
    ArrayList<RespNode> exp = new ArrayList<RespNode>();
    for (int i = 0; i< certResp.size(); i++) {  
        exp.add(certResp.get(i).getxxx());     
    }
 }

如果不知道certResp.get(i).getxxx()的返回值,很难确定,但如果它返回RespNode,则上面的代码会添加列表的RespNode实例。

答案 1 :(得分:1)

问题在于:exp.get(i)exp是新创建的ArrayList,因此它是空的,因此null索引为i

答案 2 :(得分:0)

您的列表&#39; exp&#39;是空的。在for循环中,您获得null值;从null调用方法将导致NullPointerException。

在尝试访问它们之前,必须在列表中放置值。

答案 3 :(得分:0)

在创建新的空ArrayList时,即[]

exp.get(i) 

给你null

相反,您可以使用ArrayList的add方法

void certNode(ArrayList<B> certResp) {
    //Here new empty list is created i.e exp=[] //no elements inside
    //Suppose your certResp=[B@12312,B@123834] i.e two B class objects     
    ArrayList<RespNode> exp = new ArrayList<RespNode>();

    for (int i = 0; i< certResp.size(); i++) {  //Size of certResp=2 as it contains 2 B objects  
        RespNode res=new RespNode(); //Create a RespNode class as you want to add of certResp ArrayList<RespNode>

        res.setxxx(certResp.get(i)); //Take value of xxx method of certResp.get(i) i.e B object xxx method and set into res.setXXX or RespNode class

        exp.add(res); //add res object into ArrayList
    }
 }

答案 4 :(得分:0)

    void certNode(ArrayList<B> certResp) {      
        ArrayList<RespNode> exp = new ArrayList<RespNode>();
        for (int i = 0; i< certResp.size(); i++) {  
            exp.add(new RespNode()); // <----- 
            exp.get(i).setxxx(certResp.get(i).getxxx());
            exp.get(i).setxxx(certResp.get(i).getxxx().toString());     
        }
     }

btw你可以改进语法

    void certNode(ArrayList<B> certResp) {      
        ArrayList<RespNode> exp = new ArrayList<RespNode>();
        for (B b : certResp){
          RespNode resp = new RespNode();
          resp.setxxxx(b.getxxxx());
          exp.add(resp);
        }
     }