public static DataExperssion and(DataExperssion first, DataExperssion second, DataExperssion ...others) {
        DataExperssion result;
        log.debug(String.format("method start DataExperssion[first:%s],DataExperssion[second:%s],DataExperssion...[others:%s]", 
                first, 
                second, 
                others));
        if (null == first || null == second) {
            result = NullDataExperssion.getInstance();
        } else{
            result = new AndDataExperssion(first, second);
            if (others != null) {
                for (int i = 0; i < others.length; i++) {
                    result = new AndDataExperssion(result, others[i]);
                }
            }
        }
        log.debug(String.format("method stop return:DataExperssion[%s]", result));
        return result;
    }