欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载)

程序员文章站 2024-03-13 10:57:21
泛型: 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泛型通配符解决了泛型的许多诟病(如不能重载)的全部内容了,希望对大家有所帮助,多多支持~