【Java】JDK1.5以后新型的泛型参数传递方法Object...args

Object...args是JDK1.5以后新型的参数传递,已经越来越普及了。它在一些未知参数变量的多少或者一个方法需要应对不同数目变量又不想重写方法的情况很有用。因为它不像以前那样需要定义数组,甚至定义ArrayList的动态数组再配合方法的重写来完成变量的传递。极大地提高了程序的复用性。可能这段话有点抽象,还是举一个简单易懂的例子去说明吧!

我要达到如下的效果,当一个方法收到5个整形变量int的时候,输出这5个整形变量,并求和,如果这个方法收到11个整形变量int的时候,同样做这件事。如果仅收到2个整形变量的时候,仅仅输出“你这是传来了两个参数!”。


这个对于大部分学习完JAVA课程的同学,都会使用同名方法的在不同变量的情况下的重写去解决这个问题,但是如果我要求收到X个变量都做输出并求和这件事情呢?这个X从1到200000,那么有的人会提出使用传递ArrayList动态数组到同名方法去解决这个问题。其实有了JDK1.5以后新型的泛型参数传递方法Object...args你根本就不需要写得这么复杂,写这么多代码。

以下的代码实现与上图同样的运行效果。

class TestClass {
	public void testOverloading(int i, int j) {
		System.out.println("你这是传来了两个参数!");
	}
	
	public void testOverloading(int... args) {
		System.out.println("传递过来的参数数量为" + args.length + "个");
		System.out.print("分别是:");
		int total = 0;
		for (int i : args) {
			System.out.print(i + " ");
			total += i;
		}
		System.out.println();
		System.out.println("总和为:" + total);
	}
}

public class NewVariable {
	public static void main(String[] args) {
		//找到public void testOverloading(int... args){}
		new TestClass().testOverloading(1, 2, 3, 4, 5);
		System.out.println("======================");
		//找到public void testOverloading(int... args){}
		new TestClass().testOverloading(1, 2, 3, 4, 5, 6, 1, 213, 123, 24, 1);
		System.out.println("======================");
		//因为存在public void testOverloading(int i, int j) {},所以使用这个方法
		//无视public void testOverloading(int... args){}
		new TestClass().testOverloading(1, 2);
	}
}

可以看到,在TestClass中testOverloading()方法,面对不同的参数有不同的解决方法,这就是所谓的被多次重写。调用这个方法,如果传递过来的参数不是两个的话,则直接调用所谓的泛型方法public void testOverloading(int... args) {},这东西对于没有相应参数的解决方法都适用,所以叫泛型嘛!形式参数int...args与int[] args或者是int args[]没有区别,就是整形数组args[],你可以按照一个普通的整形数组操作它,但是为了实现泛型,你必须写成int...args。在这个方法里面也使用了JDK1.5以后新型的遍历方式遍历,具体见《【Java】用JDK1.5之后的新型数组遍历方法遍历HashMap、HashMap不应该存储多元组》( 点击打开链接),不再赘述。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值