JAVA 方法未知多个入参的写法

本文介绍了一种使用可变参数的方法来处理不确定数量的输入。通过示例代码展示了如何将多个BigDecimal类型的参数拼接成字符串,并附加类型标识。讨论了方法调用时的一个常见误区及其原因。

一个方法可有多个入参,并且未知具体是多少个,可用如下写法

private String toRateString(String type, BigDecimal... rates) {

if(rates == null || rates.length == 0){
return null;
}

return Joiner.on(", ").join(rates) + "("+type+")";

}

该写法中有一个错误:

如:调用方式为 obje.oRateString("type", null)

则不可能进入return null 行

因为 rates 是传入参数的个数。

<think> 我们被要求使用三元运算符进行多个判断。在Java中,三元运算符可以嵌套使用,但要注意可读性。 例如:判断成绩等级,假设: 90分以上为A,80-89为B,70-79为C,60-69为D,60分以下为F 我们可以用嵌套的三元运算符来实现,但嵌套过多会降低可读性。 示例代码: String grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 60 ? "D" : "F"; 注意:三元运算符是右结合的,所以从第一个条件开始,如果满足则返回对应的值,否则继续后面的条件。 但是,当条件很多时,建议使用if-else或switch表达式,以保证代码的可读性。 此外,我们还可以使用之前提到的策略模式或switch表达式(Java12+)来实现。 根据引用[1][2][3],三元运算符的基本使用方式是:条件?值1:值2。嵌套就是在一个三元运算符的值部分再使用三元运算符。 下面我们给出一个具体的例子。 </think> 在 Java 中使用三元运算符进行多个判断时,可以通过**嵌套结构**实现,但需要注意**可读性和层级控制**(建议不超过3层)。以下是具体方法和示例: ### 基本嵌套方法 语法结构: ```java result = 条件1 ? 结果1 : 条件2 ? 结果2 : 条件3 ? 结果3 : 默认结果; ``` ### 成绩评级示例 ```java int score = 85; String grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 60 ? "D" : "F"; System.out.println(grade); // 输出: B ``` 执行顺序: 1. 先判断 `score >= 90` → false 2. 进第二层:`score >= 80` → true → 返回 "B" ### 进阶技巧 #### 1. 括号优化可读性 ```java String status = (age > 18) ? "成人" : (age > 12) ? "青少年" : "儿童"; ``` #### 2. 结合方法调用 ```java double discount = isVIP ? getVipDiscount() : isMember ? getMemberDiscount() : 1.0; ``` #### 3. 多变量条件判断 ```java String accessLevel = (role.equals("admin")) ? "ALL" : (role.equals("editor") && experience > 2) ? "EDIT" : "VIEW"; ``` ### 替代方案建议 当条件超过**3层**时,推荐改用其他结构保证可读性: 1. **switch 表达式** (Java 14+) ```java String grade = switch(score/10) { case 10, 9 -> "A"; case 8 -> "B"; case 7 -> "C"; default -> "F"; }; ``` 2. **策略模式**(复杂场景) ```java Map<Predicate<Integer>, String> rules = Map.of( s -> s >= 90, "A", s -> s >= 80, "B", s -> s >= 70, "C" ); String grade = rules.entrySet().stream() .filter(e -> e.getKey().test(score)) .findFirst() .map(Map.Entry::getValue) .orElse("F"); ``` ### 注意事项 1. **结合性**:三元运算符从右向左结合 $$result = a > b ? "X" : c > d ? "Y" : "Z"$$ 等价于 $$result = a > b ? "X" : (c > d ? "Y" : "Z")$$ 2. **类型一致性**:所有返回结果需为兼容类型 ```java // 错误示例:类型不兼容 Object obj = condition ? "文本" : 123; // 正确写法 Object obj = condition ? "文本" : Integer.valueOf(123); ``` 3. **空值处理**:避免嵌套导致的 `NullPointerException` ```java String name = (user != null) ? (user.getName() != null ? user.getName() : "未知") : "未登录"; ``` > **性能提示**:三元运算符在字节码层面通常编译为`if_icmp`指令[^1],与if-else效率相当。但深层嵌套会增加分支预测失败率,影响流水线效率[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值