Java 泛型的本质是参数化类型,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。那java泛型方法的重载是什么意思?下面来我们就来给大家讲解一下。
Java的方法重载一般指在同一个类中的两个同名方法,规则很简单:两个方法必须具有不同的方法签名;换句话说:就是这两个方法的参数必须不相同,使得编译器能够区分开这两个重载的方法;由于编译器不能仅仅通过方法的返回值类型来区分重载方法,所以如果两个方法只有返回类型不同,其它完全一样,编译是不能通过的。在泛型方法的重载时,这个规则稍微有一点变化,看如下代码:
class Overloaded { public static int sum(Listints) { return 0; } public static String sum(Liststrings) { return null; } }
上面是两个泛型方法的重载例子,由于Java的泛型采用擦除法实现,List和List在运行时是完全一样的,都是List类型。也就是,擦除后的方法签名如下:
int sum(List) String sum(List)
Java允许这两个方法进行重载,虽然它们的方法签名相同,只有返回值类型不同,这在两个普通方法的重载中是不允许的;当然了,如果两个泛型方法的参数在擦除后相同,而且返回值类型也完全一样,那编译肯定是不能通过的;类似地,一个类不能同时继承两个具有相同擦除类型的父类,也不能同时实现两个具有相同擦除的接口。如
Class A implements Comparable,Comparable。
总结一下:两个泛型方法在擦除泛型信息后,如果具有相同的参数类型,而返回值不一样,是可以进行重载的;Java有足够的信息来区分这两个重载的方法。
Java泛型的作用是什么?
Java 语言中,引入泛型实乃为一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。作用如下:
1、类型安全。
泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查;通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
2、消除强制类型转换。
泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
3、潜在的性能收益。
泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
4、更好的代码复用性,比如实现泛型算法
在框架设计时候,BaseDao
不过我们在使用java泛型的时候,还需要注意泛型的类型参数只能是类类型,不可以是简单类型哦!最后大家如果想要了解更多java常见问答知识,敬请关注奇Q工具网。
推荐阅读: