package cn.com.element;
import java.util.ArrayList;
import java.util.Iterator;
public class ElementArray {
/*
* 创建集合对象,不使用泛型
* 好处:
* 集合不使用泛型,默认的类型就是Object类,可以存储任意的类型
* 弊端:
* 不安全,会引发异常,不能使用子类特有的功能(向下转型可以)。
*/
public ElementArray() {
ArrayList list = new ArrayList();
list.add("想你了");
list.add(520);
//使用迭代器遍历list集合
//获取迭代器
Iterator it = list.iterator();//前面没有用泛型,这里也不用
while(it.hasNext()) {
//取出元素也是Object类型
Object obj = it.next();//前面没用,需要转换类型
System.out.println(obj);
}
}
public static void main(String[] args) {
ElementArray array = new ElementArray();
}
}
使用泛型的好处:
1.避免了类型转换的麻烦,存储是什么类型就是什么类型(也是缺点)
2.把运行期异常(代码运行之后抛出异常),提升到编译期。
package cn.com.element;
public class ElementArray2<E> {
/*
* 定义一个泛型类
*/
private E name;
public E getName() {
return name;
}
public void ElementArray2(E name) {
this.name = name;
}
}
package cn.com.element;
public class GenericClass {
public static void main(String[] args) {
/*
* ElementArray2 ea = new ElementArray2(); ea.setName("什么都可以"); Object obj =
* ea.getName();
*/
//创建GenericClass对象,泛型使用Integer类型
ElementArray2<Integer> ea1 = new ElementArray2<Integer>();
Integer name = ea1.getName();
System.out.println(name);
//创建GenericClass对象,泛型使用String类型
ElementArray2<String> ea2 = new ElementArray2<>();
String name1 = ea2.getName();
System.out.println(name1);
}
}
定义泛型类
package cn.com.element;
public class GenericMethod{
public <M> void method01(M m) { //先定义泛型<M>
System.out.println(m);
}
//定义一个含静态方法
public static <M> void method02(M m) {
System.out.println(m);
}
}
package cn.com.element;
public class GenericMethodText {
public static void main(String[] args) {
GenericMethod gr = new GenericMethod();
gr.method01("好想你");
gr.method01(154);
gr.method01(true);
GenericMethod.method02("静态方法,不推荐创建对象使用");
}
}
}
}
定义泛型方法
package cn.com.element;
public interface GenericInterface<E> {
//定义接口的类型
public void method(E e);
}
package cn.com.element;
public class GenericInterfaceImpl1 implements GenericInterface<String>{
@Override
public void method(String e) {
System.out.println(e);
}
}
package cn.com.element;
/*
*测试含有泛型的接口
*/
public class GenericInterfaceText {
public static void main(String[] args) {
GenericInterfaceImpl1 g = new GenericInterfaceImpl1();
g.method("asdfasdf");
}
}
定义泛型接口