浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载)
程序员文章站
2024-03-12 14:49:08
泛型:
package java基础增强;
import java.util.arraylist;
import java.util.list;
i...
泛型:
package java基础增强; import java.util.arraylist; import java.util.list; import org.junit.test; public class test2 { @test public void fun1(){ object[] objects = new object[10]; list list = new arraylist(); string[] strings = new string[10]; list<string> list2 = new arraylist<string>(); object[] objects2 = new string[10]; //下面这句编译不报错,但是运行包存储异常错误 objects2[0]=new integer(100);//java.lang.arraystoreexception: java.lang.integer //下面这句编译报错 // list<object> objects3 = new arraylist<string>(); /* * 泛型引用和创建两端,给出的泛型变量必须一致 * 虚拟机根本就不检查泛型存不存在 */ } public void fun2(){ list<integer> list = new arraylist<integer>(); this.print1(list);//1.print1方法只能是存储integer不能使object //========================== list<integer> list2 = new arraylist<integer>(); print(list2); list<string> list3 = new arraylist<string>(); print(list3); } //2.泛型的方法不能重载,因为泛型擦出后是一样的方法,也就是如果一个方法里的形参的泛 //型的,则不能重载这个方法,即:即使方法名相同,参数不同也不行,但是普通方法可以重载(同名不同参) public void print1(list<integer> objects){ } public void print2(list<string> strings){ } //但是后来聪明的程序员使用通配符解决了这个泛型不能重载的问题 public void print(list<? extends object> list){ } //但是下面两个普通方法可以重载 public void a(string s){ } public void a(int i){ } }
泛型的方法不能重载,因为泛型擦出后是一样的方法,也就是如果一个方法里的形参的泛型的,则不能重载这个方法,即:即使方法名相同,参数不同也不行,但是普通方法可以重载(同名不同参)
那个html本来打算过渡到xml的,且中间有个xhtml,但是迁移了10年还没过渡成功,结果html升级了,为html5,最终宣告迁移失败,还是用html吧。
其实在jdk1.5以后加入泛型,虽然可以在编译器检查,但是也引入了许多诟病的,其实在编译后,已经擦出了泛型,也就是说java虚拟机不认识泛型的。
以上就是小编为大家带来的浅谈java泛型通配符解决了泛型的许多诟病(如不能重载)的全部内容了,希望对大家有所帮助,多多支持~