【Salesforce】Apexで引数にListを渡した時の動作について

【Salesforce】Apexで引数にListを渡した時の動作について

Salesforceを利用したシステムで不具合が出ているとのことで調査を依頼されました。

Listを引数に渡している部分で原因を見つけたのでメモです。

『引数にListを渡したと思ったら中身はnullのままだった』

Listを初期化せずに呼び出した場合と初期化して呼び出した場合の比較です。

初期化を行わずに呼び出し先で値を追加しても呼び出し元では追加されていないのですね。

public class Experiment{

    // 呼び出し元
    public static void call(){
        
        List list1;
        List list2;
        
        // 初期化せずに呼び出し
        returnList(list1);
        system.debug(list1); // null
        
        // 初期化して呼び出し
        list2= new List();
        returnList(list2);
        system.debug(list2); // (a, b, c)
    }    

    // Stringのリストに値を追加して返す
    public static void returnList(List targetList){
        
        // nullの場合は初期化
        if(targetList == null){

            targetList = new List();
        }
        
        // 文字列を追加する
        targetList.add('a');
        targetList.add('b');
        targetList.add('c');
    }    
}

個人的にはこういう書き方の方が好きです。

public class Experiment{

    // 呼び出し元
    public static void call(){
        
        List hoge;
        List tmpList;
        
        // 初期化して呼び出し
        hoge= new List();
        tmpList = returnList();
        hoge.addAll(returnList());
        system.debug(hoge);
    }    

    // Stringのリストを返す
    public static List returnList(){
        
        List targetList = new List();
        
        // 文字列を追加する
        targetList.add('a');
        targetList.add('b');
        targetList.add('c');
        
        return targetList;
    }    
}

不具合の内容を伝える際、相手が不具合を作った方だと若干伝えづらかったりします。。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です