你误会泛型的意思了。假如你想把类型为Car的n个实例放入数组,比如List list = new ArrayList(); list.add(new Car()); list.add(new Car()); ...由于list能够容纳的都是从Object继承下来的类,所以这么写当然没有问题。可是,当你想把list中的Car实例取出来的时候,如果没有泛型,你必须造形,如:Car car = (Car) list.get(0);这比较麻烦而且容易出错,因为你可能向list添加Bus类的实例,如果造形成Car则肯定不对了。而如果用泛型,则可以写成这样:List<Car> list = new ArrayList<Car>(); list.add(new Car()); list.add(new Car());
Car car = list.get(0);你看,这回list只能添加Car类型的实例,而且取的时候不用再造形了。泛型的好处是在编译时就确定类型信息,而不是在运行时候,大大增加了语义,安全性也有提高。至于你说的问题,应该是不可以的,泛型必须规定数组内容的类型,而不能把int、float、char、double等类型混合放入一个确定类型的泛型数组中,这恰恰违反了泛型的初衷。如果要解决你所遇到的问题,可以把类型转换成同一种类型然后再排序。
那我有int,float,char,double等类型的数组,我将他们泛型化后,进行排序,他们还可以正确的输出排序结果吗?特别是char和其它几种类型。
是不是我只要传递一个通用的数组,剩下的事情就不用判断数组的类型,虚拟机自动会转换的,我们只需调用相应的排序算法即可!
list.add(new Car());
list.add(new Car());
...由于list能够容纳的都是从Object继承下来的类,所以这么写当然没有问题。可是,当你想把list中的Car实例取出来的时候,如果没有泛型,你必须造形,如:Car car = (Car) list.get(0);这比较麻烦而且容易出错,因为你可能向list添加Bus类的实例,如果造形成Car则肯定不对了。而如果用泛型,则可以写成这样:List<Car> list = new ArrayList<Car>();
list.add(new Car());
list.add(new Car());
Car car = list.get(0);你看,这回list只能添加Car类型的实例,而且取的时候不用再造形了。泛型的好处是在编译时就确定类型信息,而不是在运行时候,大大增加了语义,安全性也有提高。至于你说的问题,应该是不可以的,泛型必须规定数组内容的类型,而不能把int、float、char、double等类型混合放入一个确定类型的泛型数组中,这恰恰违反了泛型的初衷。如果要解决你所遇到的问题,可以把类型转换成同一种类型然后再排序。