1.什么是泛型
1.1泛型是jdk5中引入的一个新特性,它提供了编译时类型安全机制检测,允许我们编译时检测非法类型数据结构,例子如下
import java.util.ArrayList;
import static javax.swing.UIManager.get;
public class Test2 {
public static void main(String[] args) {
//这里编译时不会报错,但运行时会报数据类型转换错误
// ArrayList list=new ArrayList();
// list.add("java");
// list.add(100);
// list.add(true);
// for (int i=0;i<list.size();i++){
// Object o = list.get(i);
// String ste=(String)o;
// System.out.println(ste);
// }
//泛型
//编译期间检查类型
//无需数据类型装换
ArrayList<String>list2=new ArrayList<>();
list2.add("aeawewa");
list2.add("b");
//编译期间检查数据类型,添加int型数据会报错,避免了运行时错误
//list2.add(123);
list2.add("c");
for (int i = 0; i < list2.size(); i++) {
String s= list2.get(i);
System.out.println(s);
}
System.out.println("_-------------------------_");
ArrayList<Integer>list3=new ArrayList<>();
list3.add(12);
list3.add(234);
for (int i = 0; i <list3.size() ; i++) {
//自动拆装箱
int num=list3.get(i);
System.out.println(num);
}
}
}
复制代码
2.泛型类和接口
2.1泛型的定义语法
class 类名<泛型标识,泛型标识--->{
private 泛型标识 变量名;
----
}
复制代码
2.2常用的泛型标识符有:T,E,K,V
2.3简单泛型类定义实例
public class Gneeric<T> {
private T key;
//构造方法参数类型
//T的类型是有外部使用类来指定
public Gneeric(T key) {
this.key = key;
}
public T getKey() {
return key;
}
public void setKey(T key) {
this.key = key;
}
@Override
public String toString() {
return "Gneeric{" +
"key=" + key +
'}';
}
}
复制代码
2.3泛型类的使用语法
类名<具体的数据类型> 对象名=new 类名<具体的数据类型>();
在Java1.7之后,new后面<具体数据类型>可以不写
类名<具体的数据类型> 对象名=new 类名<>();
泛型类不支持基本数据类型
//Gneeric<int>=new Gneeric<>(1212);
----------------------------------------------------------
public class ManTest {
public static void main(String[] args) {
//在创建对象时就要给泛型标识指定具体的数据类型,这里我指定了String
Gneeric<String> gneeric=new Gneeric<>("adawddwadwa");
String key1 = gneeric.getKey();
System.out.println("Key1="+key1);//Key1=adawddwadwa
Gneeric<Integer> gneeric1=new Gneeric<>(123);
int key2=gneeric1.getKey();
System.out.println ("key2="+key2);//key2=123
//泛型类在创建对象的时候是没有指定数据类型,将按照object类型操作
Gneeric gneeric2=new Gneeric<>("awewaea");
Gneeric gneeric3=new Gneeric<>(12121);
Object key4 =gneeric3.getKey();
}
}
复制代码
2.4泛型类派生的子类,父子类的泛型类型要一致
class A<T> extends B<T>
复制代码
2.5子类不是泛型类,父类要明确泛型的数据类型
class A extends B<String>
复制代码
注意:
泛型的类型参数只能是类类型,不能是简单类型。
不能对确切的泛型类型使用instanceof操作。如下面的操作是非法的,编译时会出错。
if(ex_num instanceof Generic){ }
2.6泛型接口定义语法
interface 接口名称<泛型标识---->{
泛型标识 方法名();
----
}
复制代码
注意
实现类不是泛型类,接口要明确数据类型
实现类也是泛型类,那么泛型类型要一致
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END