什么是泛型?
2019-04-10 19:11
99 查看
泛型是通过参数化类型提高代码重用性,并在编译器强制进行类型检查的机制
泛型时Java SE 1.5的新特性
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
这种参数类型可以用在类,接口和方法的创建中,分别称为泛型类,泛型接口,泛型方法
Java语言引入反省的好处是安全简单
在Java SE 1.5之前,没有泛型的情况下,通过对类型Object的引入来实现参数的“任意化”,“任意化”带来的缺点是要做显示的强制类型转换,而这种转换时要求开发者对实际参数类型可以预知的情况下进行的,对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("123"); list.add("dsa"); list.add(100);//编译时出现的问题 list.add(1.2);//编译时出现的问题 } 1.泛型的类型参数只能时类类型(包括自定义类),不能是简单类型。(简单类型包括基本数据类型) 2.同一种泛型可以对应多个版本(因为参数类型时不确定的),不同版本的泛型类实例是不兼容的。 3.泛型的参数类型可以使用extends,super。习惯上称为“有界类型“。 4.泛型的参数类型可以是通配符类型。 private void display(List <?> list){ System.out.println(list); } public static void main(String[] args) { Integer i = new Integer(100); Number n = new Integer(200); Object o = new Integer(300); List<Integer> list1 = new ArrayList<Integer>(); list1.add(i); List<Number> list2 = new ArrayList<Number>(); list2.add(n); List<Object> list3 = new ArrayList<Object>(); list3.add(o); exam1 e = new exam1(); e.display(list1); e.display(list2); e.display(list3); } private void display(List <? extends Number> list){ System.out.println(list); } public static void main(String[] args) { Integer i = new Integer(100); Number n = new Integer(200); Object o = new Integer(300); List<Integer> list1 = new ArrayList<Integer>(); list1.add(i); List<Number> list2 = new ArrayList<Number>(); list2.add(n); List<Object> list3 = new ArrayList<Object>(); list3.add(o); exam1 e = new exam1(); e.display(list1); e.display(list2); e.display(list3);//编译出现问题 } private void display(List <? super Number> list){ System.out.println(list); } public static void main(String[] args) { Integer i = new Integer(100); Number n = new Integer(200); Object o = new Integer(300); List<Integer> list1 = new ArrayList<Integer>(); list1.add(i); List<Number> list2 = new ArrayList<Number>(); list2.add(n); List<Object> list3 = new ArrayList<Object>(); list3.add(o); exam1 e = new exam1(); e.display(list1);//编译出现问题 e.display(list2); e.display(list3); }泛型类
public class Test{
//语法 访问修饰符 class 类名 <类型参数>
}
public interface Test{
//语法 访问修饰符 interface 类名<类型参数>
}
public static void show(){
//语法 修饰符之后 <类型参数> 返回值类型 类名(){}u
}
泛型方法与非泛型方法的一同
同:声明时均传入形参,使用时均传入实参
异:非泛型方法在声明时限定实参值的类型,泛型方法在声明时限定实参类型的范围
类型实参只能是引用数据类型,不能是基本数据类型
同一种泛型可以有多个版本,不同版本需要考虑兼容性
public static void main(String[] args) { List<Integer> list1 = new ArrayList<Integer>(); List<Number> list2 = new ArrayList<Number>(); list1=list2;//不同版本需考虑兼容性 }
相关文章推荐
- C#中什么是泛型 //作者:Microsoft.NET团队 qianshangqs
- Arraylist类到底和泛型有什么关系呢
- 在JAVA中返回类型使用泛型T和Object有什么区别?
- java泛型中?和T有什么区别?
- 什么是泛型?
- 简单说明什么是泛型和用途
- public <T> void show(T t),void前面的泛型T是什么作用
- 函数的重载与 泛型(generic)有什么不同?
- 泛型详解:什么是泛型???
- 什么是泛型(C#)
- Java千百问_05面向对象(012)_泛型是什么
- 泛型详解:什么是泛型???
- 原生指针 泛型指针 智能指针 都是什么?
- 怎样判断一个泛型的数据具体是什么类型
- 什么是泛型的主要约束和次要约束
- 9 &与&&有什么区别?| 内部类 | 泛型
- 泛型详解:什么是泛型???
- 什么是泛型
- java中什么是泛型
- 什么是泛型