日期:2014-05-20  浏览次数:20801 次

Class<?>... classes是什么意思?
我在阅读Junit4.4的源代码时
  /**
* Constructs a TestSuite from the given array of classes.  
* @param classes {@link TestCase}s
*/
public TestSuite (Class<?>... classes) {
for (Class<?> each : classes)
addTest(new TestSuite(each.asSubclass(TestCase.class)));
}
Class<?>... classes这样表示是什么意思?依照说明来看时是类的数组,那为何不这样表示:Class<?>[] classes

------解决方案--------------------
我想楼主理解错了。应该是 Class<?> ... classes 
 Class<?>代表类型,中间的"..."表示无限参数,classes表示该无限参数的名字
调用可以这样写 TestSuite (String.clsss,Integer.class),但是如果写成数组就不能这样写。必须这样写
TestSuite (new Class<?>[]{String.class,Integer.class});
------解决方案--------------------
Java的...好像也是从1.5开始引入的。这个早在C语言里就有,表示不定参数个数(类型也可不同)。
现在在Java中就表示相同类型不定个数的参数。

2楼说String...与String[]作为行参时一样,这个地方其实有些差异。
比如:void hello(String... args){ } 可以这么调用:hello();
而void hello(String[] args)就不行了。只能hello(null);

而Class类是个泛型,这里使用通配符?作为泛型实参表示classes这些对象可以接受任何类型(类类型)。
------解决方案--------------------
<..>中间的可以理解为类型参数
集合中中用的比较多
好处在于不用进行类型转化
避免可能发生的转化异常