不定长参数 →String... args

概要:

参考视频

不定长参数实质是数组,它是一种语法糖,且遵守以下规则:

  • 语法:数据类型...参数名  表示不定长参数,也成为可变长参数
  • 特点:
  1. 只能是方法的最后一个参数
  2. 调用方法是参数的个数任意,也可以什么都不填
  3. 一个方法最多只能有一个可变长参数
  4. 本质上一种特殊的数组,只能作为方法的形参

具体实现方法:

下面是实际使用的例子:

    public static void main(String[] args) throws Exception {
        User user = new User(123,"","",25.33,true);
        int num = 1000;
        String str = "多余的钱";

        testParam("admin");
        testParam("system",user);
        testParam("root",user,str,num);

        byReflex(Test7.class,"test1");
        byReflex(Test7.class,"test2",String.class ,"str" ,Integer.class, 15);
        byReflex(Test7.class,"test3",String.class ,"str" ,Integer.class, 15,Boolean.class,true);

    }
    public static void testParam(String acct,Object... args){
        //不定长参数实质是个数组
        Object[] objects = args;
        System.out.println("输入不定长参数的长度为:"+args.length);
        //然后进行不定长参数的提取
        StringBuilder builder = new StringBuilder();
        for(Object x : args){
            builder.append(String.valueOf(x));
        }
        System.out.printf("账户:%s 的相关信息为:%s %n",acct,builder.toString());
        //System.out.printf("账户:%s 的相关信息为:%s %n",acct,args.toString());
    }

 

    //实际使用,根据反射来使用不定长参数
    public static void byReflex(Class<?> className,String methodName,Object... args) throws Exception {
        ArrayList<Class<?>> types = new ArrayList<>();
        ArrayList<Object> params = new ArrayList<>();
        if(args.length > 0 && args.length%2 ==0){
            for(int num = 0; num < args.length;num++){
            if(num%2 == 0){
                types.add((Class<?>) args[num]);
            }else{
                params.add(args[num]);
            }
        }}

        Object instance = className.newInstance();
        Method method = className.getDeclaredMethod(methodName, types.toArray(new Class<?>[types.size()]));
        method.setAccessible(true);
        method.invoke(instance,params.toArray(new Object[params.size()]));
    }

 另一个测试类

package com.example.demo.Test;

//用来测试不定长参数的反射使用
public class Test7 {
    public void test1(){
        System.out.println("====come in test1===");
    }

    public void test2(String str ,Integer num){
        System.out.printf("====come in test2===参数为:%s %n",str+String.valueOf(num));
    }

    private void test3(String str ,Integer num,Boolean flag){
        System.out.printf("====come in test3===参数为:%s %n",str+String.valueOf(num)+String.valueOf(flag));
    }

}

 用到的User实体

package com.example.demo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private String pwd;
    private Double money;
    private Boolean sex;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH = 7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值