本文共 2742 字,大约阅读时间需要 9 分钟。
使用泛型:
好处: 避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型//不使用泛型:好处是简单,默认object,都可以储存,坏处:容易引起异常。如果想调用某个特定类型的方法,需要向下转型,比较麻烦!
代码:public class Demo01Generic {public static void main(String[] args) { show01(); //show02();} /*private static void show02() { ArrayListlist=new ArrayList<>(); // 只能存储字符串类型的数据!}*/private static void show01() { ArrayList list=new ArrayList(); list.add("tianshan"); list.add(true); list.add(12345); Iterator it = list.iterator(); while (it.hasNext()) { Object object = it.next(); System.out.println(object); //想要调用字符串类型的方法,使用向下转型; String s=(String)object; System.out.println(s.length());//Exception in thread "main" java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String报错,不能转为string类型。 }}}
代码:
其中E代表Elementpublic class GenericClass{private E name;public E getName() { return name;}public void setName(E name) { this.name = name;}}//给这个对象类的属性使用泛型,getter/setter方法也是用泛型传递
代码:
public class GenericClassTest {public static void main(String[] args) { GenericClass gc =new GenericClass(); gc.setName("只要是基本数据类型即可/或者对象数据类型也可以"); Object name = gc.getName(); System.out.println(name);//只要是基本数据类型即可/或者对象数据类型也可以 GenericClassgcint=new GenericClass<>(); gcint.setName(1); Integer name1 = gcint.getName(); System.out.println(name1);//1,自动拆箱 GenericClass gcstr=new GenericClass<>(); gcstr.setName("String类型"); System.out.println(gcstr.getName());//String类型}}
其中第一个是没有数据类型的数据直接导入,getname方法返回对应的是Object类型
第二个传递的是integer类型的数据,getname直接返回的是integer类型的数据,同样的string类型的也是这样! 看你传入什么类型的,获取的就是什么类型的!代码:
public interface GenericInterface {public void method(I i);//定义一个抽象方法;}
代码:
public class GenericInterfaceImpl implements GenericInterface{@Overridepublic void method(String s) {//数据类型已经定义好了 System.out.println(s);}}
代码:
public class GenericInterfaceImpl2 implements GenericInterface{ @Overridepublic void method(I i) { System.out.println(i);}}
//public class GenericInterfaceImpl2<String,I> implements GenericInterface也是可以的
代码:
public class GenericInterfaceTest {public static void main(String[] args) { //方法一实现类定义了string类型了。 GenericInterfaceImpl gc1=new GenericInterfaceImpl(); gc1.method("周日补周五的课,美滋滋gepi~~~~~"); //gc1.method(1234);错误写法。定义好了数据类型 //方法二实现类跟着接口类是泛型,没有固定。 GenericInterfaceImpl2 gc2=new GenericInterfaceImpl2(); gc2.method(1234); gc2.method("看来你是真的皮");}}
实现效果
周日补周五的课,美滋滋gepi~~~~~ 1234 看来你是真的皮 实现原理参考开头的案例!转载地址:http://mljmz.baihongyu.com/