福州网站设计哪里好,个人备案网站做电影站,怎样自学做网站,泰安市房产信息网官网为什么要有泛型#xff1f; 1.解决元素存储的安全性问题 2.解决获取数据元素时#xff0c;需要类型强转的问题 服用前#xff1a; 服用后#xff1a; 泛型#xff0c;JDK1.5新加入的#xff0c;解决数据类型的安全性问题#xff0c;其主要原理是在类声明时通过一个标识表… 为什么要有泛型 1.解决元素存储的安全性问题 2.解决获取数据元素时需要类型强转的问题 服用前 服用后 泛型JDK1.5新加入的解决数据类型的安全性问题其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这样在类声明或实例化时只要指定好需要的具体的类型即可。 Java泛型可以保证如果程序在编译时没有发出警告运行时就不会产生ClassCastException异常。同时代码更加简洁、健壮。 使用泛型 泛型的声明 interface ListT和class TestGenK,V 其中TKV不代表值而是表示类型。这里使用任意字母都可以。常用T表示是Type的缩写。 泛型的实例化 一定要在类名后面指定类型参数的值类型。如 ListString StrList new ArrayListString(); iteratorCustomer iterator customers.iterator(); T只能是类不能用基本数据类型填充。 泛型的几个重要使用 1.在集合中使用泛型 2.自定义泛型类 3.泛型方法 4.泛型接口 对于泛型类 1.对象实例化时不指定泛型默认为Object 2.泛型不同的引用不能相互赋值。 3.加入集合中的对象类型必须与指定的泛型类型一致。 4.静态方法中不能使用类的泛型。 5.如果泛型类是一个接口或抽象类则不可创建泛型类的对象。 6.不能在catch中使用泛型 7.从泛型类派生子类泛型类型需具体化 自定义泛型类 1 class PersonT{2 //使用T类型定义变量3 private T info;4 //使用T类型定义一般方法5 public T getInfo(){6 return info;7 }8 public void setInfo(T info){9 this.infoinfo;
10 }
11 //使用T类型定义构造器
12 public Person(){}
13 public Person(T info){
14 this.infoinfo;
15 }
16 //static的方法中不能声明泛型
17 // public static void show(T t){
18 //
19 // }
20 //try{}
21 //catch(T t){}
22 } 对于泛型方法 方法也可以被泛型化不管此时定义在其中的类是不是泛型化的。在泛型方法中可以定义泛型参数此时参数的类型就是传入数据的类型。 泛型方法的格式 [访问权限]泛型返回类型 方法名([泛型标识 参数名称])抛出的异常 public class DAO{ publicE E get(int id,E e){ E result null; return result; } } static T void fromArrayToCollection(T[] a, CollectionT c) { for (T o : a) { c.add(o); } } public static void main(String[] args) { Object[] ao new Object[100]; CollectionObject co new ArrayListObject(); fromArrayToCollection(ao, co); String[] sa new String[20]; CollectionString cs new ArrayList(); fromArrayToCollection(sa, cs); CollectionDouble cd new ArrayList(); // 下面代码中T是Double类但sa是String类型编译错误。 // fromArrayToCollection(sa, cd); // 下面代码中T是Object类型sa是String类型可以赋值成功。 fromArrayToCollection(sa, co); } 泛型和继承的关系 如果B是A的一个子类型子类或者子接口而G是具有有泛型声明的类或接口GB并不是GA的子类型 比如String是Object的子类单ListString并不是ListObject的子类 通配符 1.使用类型通配符 比如List?,Map?,? List?是ListString、ListObject等各种泛型List的父类。 2.读取List?的对象list中的元素时永远是安全的因为不管list的真实类型是什么它包含的都是Object。 3.写入list中的元素时不行。因为我们不知道c的元素类型我们不能向其中添加对象。 唯一的例外是null它是所有类型的成员。 将任意元素加入到其中不是类型安全的 Collection? cnew ArrayListString(); c.add(new Object());//编译时错误 因为我们不知道c的元素类型我们不能向其中添加对象 add方法有类型参数E作为集合的元素类型。我们传给add的任何参数都必须是一个未知类型的子类。因为我们不知道那是声明类型所以我们无法传递任何东西进去。 唯一的例外是null它是所有类型的成员。 另一方面我们可以调用get()方法并使用其返回值。返回值是一个未知的类型但是我们知道它总是一个Object 有限制的通配符 ? 允许所有泛型的引用调用 举例 ? extends Number (无穷小 , Number] 只允许泛型为Number及Number子类的引用调用 ? super Number [Number , 无穷大) 只允许泛型为Number及Number父类的引用调用 ? extends Comparable 只允许泛型为实现Comparable接口的实现类的引用调用 转载于:https://www.cnblogs.com/liangxiaoyu/p/5137614.html