1.泛型存在的意义
将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
例如:GenericClass<T>{}
没有使用泛型前
例如 :
1.放在的集合中的类型都是Object类型的,在取出元素时人为的强制类型转化到具体的目标类型可能会出现ClassCastException
2.在实现一个加法运算的时候每种数据类型类型都要重载一个方法。
所以使用泛型的意义在于:
1.适用于多种数据类型执行相同的代码(代码复用)
2.泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
2.泛型的使用
①.泛型类的使用
public class GenericClass<T> {
public T data;
public T getData(){
return data;
}
public void setData(T data){
this.data=data;
}
public static void main(String[] args) {
GenericClass <String> genericClass=new GenericClass<>();
genericClass.setData("我是一个泛型类");
String str=genericClass.getData();
System.out.println(str);//我是一个泛型类
}
}
②.泛型接口的使用
public interface GenericIntercace<T> {
T getData();
}
实现泛型接口
1.泛型类实现泛型接口
package Csdn;
public class GenericClassTest<T> implements GenericInterface<T> {
public T data;
@Override
public T getData() {
return data;
}
public void setData(T data){
this.data=data;
}
public static void main(String[] args) {
GenericClassTest <String> genericClassTest=new GenericClassTest<>();
genericClassTest.setData("我是一个泛型类");
String str=genericClassTest.getData();
System.out.println(str);
}
}
2.具体类型实现方式
public class GenericClass2 implements GenericInterface<String> {
@Override
public String getData() {
return "我是一个泛型类";
}
public static void main(java.lang.String[] args) {
GenericClass2 genericClass2=new GenericClass2();
System.out.println(genericClass2.getData());
}
}
③.泛型的总结
- 泛型是为了解决某些容器、算法等代码的通用性而引入,并且能在编译期间做类型检查。
- 泛型利用的是 Object 是所有类的祖先类,并且父类的引用可以指向子类对象的特定而工作。
- 泛型是一种编译期间的机制,即 MyArrayList 和 MyArrayList 在运行期间是一个类型。
- 泛型时java中的合法语句,标记就是<>;