java 不确定参数个数_Java传入参数个数不确定可用(Type ... values)

本文介绍了如何利用Java的可变长参数(varargs)特性来简化方法的重载,允许传入任意数量的消息参数进行打印。通过示例展示了如何在debug模式下打印消息及其数量,以及如何通过不同类型的第一个参数来区分不同的方法调用。

/**

* 可变长的参数。

* 有时候,我们传入到方法的参数的个数是不固定的,为了解决这个问题,我们一般采用下面的方法:

* 1. 重载,多重载几个方法,尽可能的满足参数的个数。显然这不是什么好办法。

* 2. 将参数作为一个数组传入。虽然这样我们只需一个方法即可,但是,

* 为了传递这个数组,我们需要先声明一个数组,然后将参数一个一个加到数组中。

* 现在,我们可以使用可变长参数解决这个问题,

* 也就是使用...将参数声明成可变长参数。显然,可变长参数必须是最后一个参数。

*/

public class VarArgs {

/**

* 打印消息,消息数量可以任意多

* @param debug 是否debug模式

* @param msgs 待打印的消息

*/

public static void printMsg(boolean debug, String ... msgs){

if (debug){

// 打印消息的长度

System.out.println("DEBUG: 待打印消息的个数为" + msgs.length);

}

for (String s : msgs){

System.out.println(s);

}

if (debug){

// 打印消息的长度

System.out.println("DEBUG: 打印消息结束");

}

}

/**

* 重载printMsg方法,将第一个参数类型该为int

* @param debugMode 是否debug模式

* @param msgs 待打印的消息

*/

public static void printMsg(int debugMode, String ... msgs){

if (debugMode != 0){

// 打印消息的长度

System.out.println("DEBUG: 待打印消息的个数为" + msgs.length);

}

for (String s : msgs){

System.out.println(s);

}

if (debugMode != 0){

// 打印消息的长度

System.out.println("DEBUG: 打印消息结束");

}

}

public static void main(String[] args) {

// 调用printMsg(boolean debug, String ... msgs)方法

VarArgs.printMsg(true);

VarArgs.printMsg(false, "第一条消息", "这是第二条");

VarArgs.printMsg(true, "第一条", "第二条", "这是第三条");

// 调用printMsg(int debugMode, String ... msgs)方法

VarArgs.printMsg(1, "The first message", "The second message");

}

}

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hvlink.mapper.order.TbOrderDetailMapper"> <insert id="batchInsert"> insert into tb_order_detail(purchase_order_no, serial_version_num, company_code, factory_code, warehouse_code, line_no, delivery_date, part_code, part_desc, unit, total_qty, required_qty, available_qty, shipped_qty, type, frequency, approval_code, create_time, order_type) values <foreach collection="list" item="item" separator=","> (#{item.purchaseOrderNo}, #{item.serialVersionNum}, #{item.companyCode}, #{item.factoryCode}, #{item.warehouseCode}, #{item.lineNo}, #{item.deliveryDate, jdbcType=TIMESTAMP}, #{item.partCode},#{item.partDesc},#{item.unit},#{item.totalQty}, #{item.requiredQty}, #{item.availableQty}, #{item.shippedQty}, #{item.type}, #{item.frequency}, #{item.approvalCode}, GETDATE(), #{item.orderType}) </foreach> </insert> <update id="batchUpdate"> update tb_order_detail SET available_qty = <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end"> when #{item.id} then #{item.availableQty} </foreach> ,shipped_qty = <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end"> when #{item.id} then #{item.shippedQty} </foreach> WHERE id in <foreach collection="list" index="index" item="item" separator="," open="(" close=")"> #{item.id} </foreach> </update> <select id="queryExistingApprovalCodes" resultType="com.hvlink.entity.po.order.TbOrderDetailPO"> SELECT id, purchase_order_no, company_code, factory_code, serial_version_num, line_no, delivery_date, part_code, part_desc, unit, total_qty, required_qty, available_qty, shipped_qty, type, frequency, approval_code, order_type, warehouse_code FROM tb_order_detail a where <foreach collection="list" item="item" separator="OR" open="" close=""> (company_code = #{item.companyCode} AND purchase_order_no = #{item.purchaseOrderNo} and serial_version_num = #{item.serialVersionNum} and order_type = #{item.orderType}) </foreach> </select> <!-- 明细查询 --> <select id="queryDetailsByCompositeKeys" resultType="com.hvlink.entity.dto.order.PurchaseOrderDetailsDTO"> SELECT d.purchase_order_no, d.line_no, d.delivery_date, d.part_code, d.part_desc, d.unit, d.total_qty, d.required_qty, d.available_qty, d.shipped_qty, d.type, d.frequency, d.approval_code, d.serial_version_num, d.company_code, d.order_type FROM tb_order_detail d WHERE EXISTS ( SELECT 1 FROM ( VALUES <foreach collection="compositeKeys" item="item" separator=","> (#{item.purchaseOrderNo}, #{item.companyCode}, #{item.serialVersionNum}) </foreach> ) AS keys(purchase_order_no, company_code, serial_version_num) WHERE d.purchase_order_no = keys.purchase_order_no AND d.company_code = keys.company_code AND d.serial_version_num = keys.serial_version_num ) ORDER BY d.purchase_order_no DESC, d.line_no ASC, d.delivery_date DESC </select> <delete id="batchDelete"> <if test="list != null and list.size() > 0"> delete from tb_order_detail where order_type = 2 and purchase_order_no in <foreach collection="list" index="index" item="item" separator="," open="(" close=")"> #{item} </foreach> </if> </delete> </mapper> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hvlink.mapper.order.HandOrderMapper"> <!-- 明细查询 --> <!-- 根据采购订单号集合查询明细 --> <select id="queryDetailsByHandOrderNos" resultType="com.hvlink.entity.dto.order.HandOrderDetailDTO"> SELECT d.purchase_order_no, d.line_no, d.delivery_date, d.part_code, d.part_desc, p.supplier_part, <!-- 供应商零件号 --> d.unit, d.required_qty, <!-- 需求数量 --> d.available_qty, d.shipped_qty FROM tb_order_detail d LEFT JOIN tm_part p on d.part_code = p.part_code WHERE <foreach collection="compositeKeys" item="item" separator=","> (#{item.purchaseOrderNo}, #{item.companyCode}, #{item.serialVersionNum}) </foreach> ) AS keys(purchase_order_no, company_code, serial_version_num) WHERE d.purchase_order_no = keys.purchase_order_no AND d.company_code = keys.company_code AND d.serial_version_num = keys.serial_version_num ) ORDER BY d.purchase_order_no, d.line_no </select> </mapper>一个有问题一个没有
最新发布
09-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值