定义:
泛型是程序设计语言的一种特性。
允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。
各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。
将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。
泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
Java 泛型的参数只可以代表类,不能代表个别对象。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率,避免了一些 无所谓的强制类型转换。
泛型接口
泛型接口的 定义格式
interface 接口名字<声明自定义泛型>{
}
接口中使用泛型的注意点:
1.只要是 泛型,就不能够使用基本数据类型
2.接口上的自定义泛型,在什么时候确定 具体的数据类型呢?
如果在实现接口的时候 没有指定具体的数据类型, 那么默认是Object类型
3.还可以在 创建这个接口的实现类的对象的时候,指定出这个具体的数据类型
4.如果让一个类 实现一个 自定义泛型的接口,那么格式如下:
class Demo7<T> implements MyCollection<T>{
}
泛型的上限和下限
在JAVA的泛型中可以指定一个泛型的上限和下限
泛型上限使用extends关键字声明,表示参数化的类型可能是做指定的类型或者是此类型的子类
而泛型下限使用super关键字声明,表示参数化的类型可能是做指定的类型或者是此类型的父类,直至object类。
泛型的注意事项:
1.在泛型中 是不允许使用基本数据类型的,
这些基本数据类型 实际上都是经过了包装的 对象类型
byte ------ Byte
short ------ Short
int ------ Integer
char ------- Character
long ------ Long
float ------ Float
double ----- Double
boolean ----- Boolean
2.在方法上使用自定义泛型,这个方法的自定义泛型的具体的数据类型是在调用这个方法传入实参的时候确定具体的数据类型。
3.自定义泛型的名称只要符合标识符规范即可, 但是一般情况下,习惯或者推荐使用一个大写字母表示泛型
4.如果在类上用了自定义泛型,但是我们在new这个类的对象的时候,没有指定这个泛型的类型,那么这个具体类型,默认就是Object类型的。
泛型在集合中的最基本的使用规则ArrayList <String> list = new ArrayList<String>(); // 定义集合对象的 时候最规范的泛型 写法
ArrayList <String> list = new ArrayList(); //可以这样写,但是不推荐
ArrayList list = new ArrayList<String>(); // 可以这样写
ArrayList <Object> list = new ArrayList<String>(); // 不可以这样写
泛型中没有多态的概念,不能有大类型和小类型混着用
左右的类型必须是 一样的, 可以只写一边,但是建议的规范格式是写两边
如果你没有指定集合中 的类型,那么默认类型是 Object
这两种写法是为了兼容之前的老系统版本而允许的,不推荐
ArrayList <String> list = new ArrayList(); //可以这样写,但是不推荐
ArrayList list = new ArrayList<String>(); // 可以这样写
左右的类型必须是 一样的, 可以只写一边,但是建议的规范格式是写两边
如果你没有指定集合中 的类型,那么默认类型是 Object
这两种写法是为了兼容之前的老系统版本而允许的,不推荐
ArrayList <String> list = new ArrayList(); //可以这样写,但是不推荐
ArrayList list = new ArrayList<String>(); // 可以这样写
示例代码如下:
import java.util.*;
public class Demo {
public class Demo {
public static void main(String[] args) {
// ArrayList<String> 代表我个集合 之存储 字符串String类型的数据
//编译器 会在 类型不匹配的时候,直接报错,避免了在运行时产生的问题
ArrayList<String> list = new ArrayList<String>();
list.add("abc");
list.add("hello");
list.add("perfect");
//集合是可以存储任意类型的数据
list.add("1");
//list.add(100);
ArrayList list1 = new ArrayList(); // 没有指定 类型, 那么默认是 Object类型
//获取到这个元素,然后更改它们
for(int i = 0; i < list.size(); i++){
Object obj = list.get(i);
//java.lang.Integer cannot be cast to java.lang.String
String newStr = ((String)obj).toUpperCase();
//存储到集合中
System.out.println(list.get(i).toUpperCase());
}
}
}
// ArrayList<String> 代表我个集合 之存储 字符串String类型的数据
//编译器 会在 类型不匹配的时候,直接报错,避免了在运行时产生的问题
ArrayList<String> list = new ArrayList<String>();
list.add("abc");
list.add("hello");
list.add("perfect");
//集合是可以存储任意类型的数据
list.add("1");
//list.add(100);
ArrayList list1 = new ArrayList(); // 没有指定 类型, 那么默认是 Object类型
//获取到这个元素,然后更改它们
for(int i = 0; i < list.size(); i++){
Object obj = list.get(i);
//java.lang.Integer cannot be cast to java.lang.String
String newStr = ((String)obj).toUpperCase();
//存储到集合中
System.out.println(list.get(i).toUpperCase());
}
}
}
以上是我对泛型内容的部分总结,如有错误还请指出。