装修网站怎么做推广,wordpress怎么设置中文,html编程题题库,灰色网站如何推广泛型#xff1a; 泛型#xff0c;就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值或参数的类型。这个类型参数将在使用时#xff08;例如#xff0c;继承或实现这个接口、创建对象或调用方法时#xff09;确定#xff08;即传入实际的…泛型 泛型就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值或参数的类型。这个类型参数将在使用时例如继承或实现这个接口、创建对象或调用方法时确定即传入实际的类型参数也称为类型实参。
在集合中使用泛型之前可能存在的问题 问题1类型不安全。因为add()的参数是Object类型意味着任何类型的对象都可以添加成功 问题2需要使用强转操作繁琐。还有可能导致ClassCastException异常。
map中使用泛型 HashMapString,Integer map new HashMap(); //类型推断// SetMap.EntryString,Integer entrySet map.entrySet();
// IteratorMap.EntryString, Integer iterator entrySet.iterator();var entrySet map.entrySet();var iterator entrySet.iterator();while(iterator.hasNext()){Map.EntryString, Integer entry iterator.next();String key entry.getKey();Integer value entry.getValue();System.out.println(key --- value);}}说明 集合框架在声明接口和其实现类时使用了泛型jdk5.0在实例化集合对象时 如果没有使用泛型则认为操作的是Object类型的数据。如果使用了泛型则需要指明泛型的具体类型。一旦指明了泛型的具体类型则在集合的相关的方法中凡是使用类的泛型的位置都替换为具体的泛型类型。 自定义泛型类\接口 1.1 格式 class AT{
}
interface BT1,T2{ }
使用说明 ①声明完自定义泛型类以后可以在类的内部比如属性、方法、构造器中使用类的泛型。 ② 创建自定义泛型类的对象时可以指明泛型参数类型。一旦指明内部凡是使用类的泛型参数的位置都具体化为指定的类的泛型类型。 ③ 如果在创建自定义泛型类的对象时没有指明泛型参数类型那么泛型将被擦除泛型对应的类型均按照Object处理但不等价于Object。泛型要使用一路都用。要不用一路都不要用。 ④ 泛型的指定中必须使用引用数据类型。不能使用基本数据类型此时只能使用包装类替换。 ⑤除创建泛型类对象外子类继承泛型类时、实现类实现泛型接口时也可以确定泛型结构中的泛型参数。如果我们在给泛型类提供子类时子类也不确定泛型的类型则可以继续使用泛型参数。比如我们还可以在现有的父类的泛型参数的基础上新增泛型参数。
eg
public class SubOrder1 extends Order{
}//不是泛型public class SubOrder2 extends OrderInteger{
}//不是泛型//错误写法
public class sub extends topT{
}//正确写法
public class SubOrder3T extends OrderT{
}public class SubOrder4E extends OrderInteger{
}public class SubOrder5T,E extends OrderT{
}
注意点 ① 泛型类可能有多个参数此时应将多个参数一起放在尖括号内。比如E1,E2,E3 ② JDK7.0 开始泛型的简化操作ArrayListFruit flist new ArrayList(); ③ 如果泛型结构是一个接口或抽象类则不可创建泛型类的对象。 ④ 不能使用new E[]。但是可以E[] elements (E[])new Object[capacity]; 参考ArrayList源码中声明Object[] elementData而非泛型参数类型数组。 ⑤ 在类/接口上声明的泛型在本类或本接口中即代表某种类型但不可以在静态方法中使用类的泛型。 ⑥ 异常类不能是带泛型的。
自定义泛型方法 在泛型类的方法中使用了类的泛型参数。该方法并不是泛型方法
格式权限修饰符 T 返回值类型 方法名(形参列表){ //通常在形参列表或返回值类型的位置会出现泛型参数T}
举例 public E E method(E e){ }
说明 声明泛型方法时一定要添加泛型参数T 泛型参数在方法调用时指明其具体的类型 泛型方法可以根据需要声明为static的 泛型方法所属的类是否是一个泛型类都可以。
补充1类SuperA是类A的父类则GSuperA 与 GA的关系GSuperA 和 GA是并列的两个类没有任何子父类的关系。 比如ArrayListObject 、ArrayListString没有关系
解决不适用性通配符
egArrayList? G? 可以看做是GA类型的父类即可以将GA的对象赋值给G?类型的引用或变量 读写数据的特点(以集合ArrayList?为例说明) 读取数据允许的读取的值的类型为Object类型 写入数据不允许的。特例写入null值。
有限制条件的通配符
List? extends A : 可以将ListA或ListB赋值给List? extends A。其中B类是A类的子类。 List ? super A :可以将ListA或ListB赋值给List? extends A。其中B类是A类的父类。
有限制条件的统配符的读写操作
List? extends A可读返回对象为A类型不可写除null
List ? super A可读返回对象为object类型可写A及其子类
补充2类SuperA是类A的父类或接口SuperAG 与 AG的关系SuperAG 与AG 有继承或实现的关系。即AG的实例可以赋值给SuperAG类型的引用或变量 比如ListString 与 ArrayListString