当前位置: 首页 > news >正文

VPS做镜像网站哈尔滨市工程建设网

VPS做镜像网站,哈尔滨市工程建设网,免费网站提供,如何建立一个网站来卖东西泛型与File 文章目录 一、为什么要有泛型#xff1f;1.1、什么是泛型#xff1f;1.2、泛型的设计背景1.3、泛型的概念 二、在集合中使用泛型三、自定义泛型结构2.1、泛型方法的使用 四、泛型在继承上的体现五、通配符的使用5.1、通配符的使用5.2、有限制条件的通配符的使用 …泛型与File 文章目录 一、为什么要有泛型1.1、什么是泛型1.2、泛型的设计背景1.3、泛型的概念 二、在集合中使用泛型三、自定义泛型结构2.1、泛型方法的使用 四、泛型在继承上的体现五、通配符的使用5.1、通配符的使用5.2、有限制条件的通配符的使用 六、泛型应用举例 一、为什么要有泛型 jdk5.0新增的特性 1.1、什么是泛型 泛型标签Generic 举例 中药店每个抽屉外面贴着标签超市购物架上很多瓶子每个瓶子装的是什么有标签 1.2、泛型的设计背景 集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的 对象所以在JDK1.5之前只能把元素类型设计为ObjectJDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定其他的部分是确定的例如关于 这个元素如何保存如何管理等是确定的因此此时把元素的类型设计成一个参数这个类型参数叫做泛型。CollectionListArrayList 这个就 是类型参数即泛型。 1.3、泛型的概念 所谓泛型就是允许在定义类、接口时通过一个标识类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时例如继承或实现这个接口用这个类型声明变量、创建对象时确定即传入实际的类型参数也称为类型实参 二、在集合中使用泛型 在集合中使用泛型 总结 集合接口或集合类在jdk5.0时都修改为带泛型的结构。 在实例化集合类时可以指明具体的泛型结构 指明完以后在集合类或接口中凡是定义类或接口时内部结构比如方法、构造器、属性等使用 比如add(E e) — 实例化以后add(Integer e) 注意点泛型的类型必须是类不能是基本数据类型。需要用到基本数据类型的位置拿包装类替换 如果实例化时没有指明泛型的类型。默认类型为java.lang.Object类型。 举例1 /*** 在集合中使用泛型的情况:以 HashMap 为例*/ Test public void test3(){HashMapString, Integer map new HashMap();map.put(Jack, 123);map.put(Tom, 156);map.put(Book, 189);map.put(Abby, 145);SetMap.EntryString, Integer entry map.entrySet();IteratorMap.EntryString, Integer iterator entry.iterator();while (iterator.hasNext()){Map.EntryString, Integer entry1 iterator.next();String key entry1.getKey();Integer value entry1.getValue();System.out.println(key -- value);} }举例2 /*** 在集合中使用泛型的情况以 ArrayList为例*/Testpublic void test2(){ArrayListInteger list new ArrayListInteger();//存放学生的成绩list.add(78);list.add(66);list.add(98);list.add(80);//遍历方式二包装类使用增强for循环 // for (Integer score: list){ // int stuScore score; // //避免强转 // System.out.println(stuScore); // }//遍历方式三迭代器的方式IteratorInteger iterator list.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}// 遍历方式一转为数组 // System.out.println(Arrays.toString(list.toArray()));//问题一类型不安全 // list.add(Tom); // for (Object score:list){ // //强转可能出现 ClassCastException // int stuScore (Integer) score; // System.out.println(stuScore); // }}三、自定义泛型结构 如何自定义泛型结构泛型类、泛型接口泛型方法 自定义泛型类 Order import java.util.ArrayList; import java.util.List;/*** author: Arbicoral* Description: 自定义的泛型类*/ public class OrderT {String name;int orderId;/*** ① 泛型方法在方法中出现了泛型的结构泛型参数与类的泛型参数没有任何关系* 下面例子中类的泛型是 String 泛型方法的泛型是 Integer没有任何关系* ② 换句话说泛型方法所属的类是不是泛型类都没有关系* ③ 泛型方法可以声明为静态的。原因泛型参数是在调用方法时确定的。并非在实例化时确定的*/public static E ListE copyFromArrayList(E[] arr){ArrayListE list new ArrayList();for (E e: arr){list.add(e);}return list;}//类的内部结构就可以使用类的泛型T orderT;public Order(){//编译不通过此时T还是变量只是变量是用类型来充当的//T[] arr new T[10];//强转编译通过T[] arr (T[]) new Object[10];};public Order(String name, int orderId, T orderT){this.orderT orderT;this.orderId orderId;this.name name;}public T getOrderT() {return orderT;}public void setOrderT(T orderT){this.orderT orderT;}Overridepublic String toString() {return Order{ name name \ , orderId orderId , orderT orderT };}// /** // * 静态方法中不能使用类的泛型 // * 因为类的泛型是造对象的时候确定的静态方法早于对象创建的相当于类型还没有确定就要用了不行 // * param orderT // */ // public static void show(T orderT){ // System.out.println(orderT); // }// public void show(){ // //编译不通过 // try{ // // }catch (T t) // } }Order的2个子类SubOrder、SubOrder1 public class SubOrder extends OrderInteger{//SubOder:不再是泛型类 }public class SubOder1T extends OrderT{//SubOder1T:仍然是泛型类 }注意点 泛型类可能有多个参数此时应将多个参数一起放在尖括号内。比如 E1, E2, E3 泛型类的构造器如下public GenericClass(){}。 ​ 而下面是错误的public GenericClass\E(){} 实例化后操作原来泛型位置的结构必须与指定的泛型类型一致。 泛型不同的引用不能相互赋值。 尽管在编译时ArrayList和ArrayList是两种类型但是在运行时只有 一个ArrayList被加载到JVM中。 泛型如果不指定将被擦除泛型对应的类型均按照Object处理但不等价 于Object。经验泛型要使用一路都用。要不用一路都不要用。 如果泛型结构是一个接口或抽象类则不可创建泛型类的对象。 jdk1.7泛型的简化操作ArrayList flist new ArrayList(); 泛型的指定中不能使用基本数据类型可以使用包装类替换。 在类/接口上声明的泛型在本类或本接口中即代表某种类型可以作为非静态 属性的类型、非静态方法的参数类型、非静态方法的返回值类型。但在静态方法 中不能使用类的泛型。 异常类不能是泛型的 不能使用new E[]。但是可以E[] elements (E[])new Object[capacity]; 参考ArrayList源码中声明Object[] elementData而非泛型参数类型数组。 父类有泛型子类可以选择保留泛型也可以选择指定泛型类型 子类不保留父类的泛型按需实现 没有类型 擦除具体类型 子类保留父类的泛型泛型子类 全部保留 部分保留 结论子类必须是“富二代”子类除了指定或保留父类的泛型还可以增加自 己的泛型 /*** 注意点4泛型不同的引用不能相互赋值。*/ public void test3(){ArrayListString list1 null;ArrayListInteger list2 null;//泛型不同的引用不能相互赋值。//list2 list1; }/*** author: Arbicoral* Description: 注意点10: 异常类不能声明为泛型类*/ public class MyExceptionT extends Exception { }2.1、泛型方法的使用 Test /*** ① 泛型方法在方法中出现了泛型的结构泛型参数与类的泛型参数没有任何关系* 下面例子中类的泛型是 String 泛型方法的泛型是 Integer没有任何关系* ② 换句话说泛型方法所属的类是不是泛型类都没有关系* ③ 泛型方法可以声明为静态的。原因泛型参数是在调用方法时确定的。并非在实例化时确定的*/ public void test4(){OrderString order new Order();Integer[] arr new Integer[]{1,2,3,4};//泛型方法在调用时指明泛型参数的类型ListInteger list order.copyFromArrayList(arr);System.out.println(list); }四、泛型在继承上的体现 /*** 1. 泛型在继承方面的体现* 虽然类A 是类B的父类 但是GA 和 GB二者不具备子父类关系二者是并列关系** 补充类A 是类B的父类 AG 是BG的父类*/ Test public void test1(){Object obj null;String str null;//多态obj str;Object[] arr1 null;String[] arr2 null;//多态展示arr1 arr2;ListObject list1 null;ListString list2 null;//此时的list1 和 list2 的类型不具有子父类关系//编译不通过// list1 list2; }五、通配符的使用 5.1、通配符的使用 /*** 2. 通配符的使用* 通配符?* 类A是类B的父类GA和GB是没有关系的二者共同的父类是G?*/ Test public void test2(){ListObject list1 null;ListString list2 null;List? list null;list list1;list list2;print(list1);print(list2); }//遍历 public void print(List? list){Iterator? iterator list.iterator();while (iterator.hasNext()){Object next iterator.next();System.out.println(next);} }5.2、有限制条件的通配符的使用 六、泛型应用举例 定义一个泛型类 DAO在其中定义一个 Map 成员变量Map 的键 为 String 类型值为 T 类型。 分别创建以下方法 public void save(String id,T entity) 保存 T 类型的对象到 Map 成员 变量中public T get(String id)从 map 中获取 id 对应的对象public void update(String id,T entity)替换 map 中 key 为 id 的内容, 改为 entity 对象public List list()返回 map 中存放的所有 T 对象public void delete(String id)删除指定 id 对象 定义一个 User 类 该类包含private 成员变量int 类型 idageString 类型name。 定义一个测试类 创建 DAO 类的对象 分别调用其 save、get、update、list、delete 方 法来操作 User 对象 使用 Junit 单元测试类进行测试 泛型类 DAO package 20230527.exer;import java.util.*;/*** author: Arbicoral* create: 2023-05-27 17:45* Description:** 定义个泛型类 DAOT在其中定义一个 Map 成员变量Map 的键为 String 类型值为 T 类型。* 分别创建以下方法* public void save(String id,T entity) 保存 T 类型的对象到 Map 成员变量中* public T get(String id)从 map 中获取 id 对应的对象* public void update(String id,T entity)替换 map 中 key 为 id 的内容,改为 entity 对象* public ListT list()返回 map 中存放的所有 T 对象* public void delete(String id)删除指定 id 对象*/ public class DAOT {private MapString, T map new HashMapString, T();/*** 保存 T 类型的对象到 Map 成员变量中* param id* param entity*/public void save(String id,T entity){map.put(id, entity);}/*** 从 map 中获取 id 对应的对象*/public T get(String id){return map.get(id);}/*** 替换 map 中 key 为 id 的内容,改为 entity 对象*/public void update(String id,T entity){if (map.containsKey(id)){map.put(id, entity);}}/*** 返回 map 中存放的所有 T 对象* return*/public ListT list(){//错误的 // CollectionT values map.values(); // return (ListT) values;//正确的ArrayListT list new ArrayList();CollectionT values map.values();for(T t: values){list.add(t);}return list;}/**删除指定 id 对象*/public void delete(String id){map.remove(id);} }User 类 package 20230527.exer; import java.util.Objects;/*** author: Arbicoral* create: 2023-05-27 20:16* Description:** 定义一个 User 类* 该类包含private 成员变量int 类型 idageString 类型name。*/ public class User {private int id;private int age;private String name;//空参构造器public User(){}//带参构造器public User(int id, int age, String name){this.age age;this.id id;this.name name;}public void setId(int id){this.id id;}public void setAge(int age) {this.age age;}public void setName(String name) {this.name name;}public int getAge() {return age;}public int getId() {return id;}public String getName() {return name;}Overridepublic String toString( ) {return User{ id id , age age , name name \ };}Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;User user (User) o;return id user.id age user.age Objects.equals(name, user.name);}Overridepublic int hashCode() {return Objects.hash(id, age, name);} }测试类 package 20230527.exer;import java.util.List;/*** author: Arbicoral* create: 2023-05-27 20:22* Description:** 定义一个测试类* 创建 DAO 类的对象 分别调用其 save、get、update、list、delete 方法来操作 User 对象* 使用 Junit 单元测试类进行测试*/ public class DAOTest {public static void main(String[] args) {DAOUser dao new DAOUser();dao.save(1001, new User(1001, 34,周杰伦));dao.save(1002, new User(1002, 20,昆凌));dao.save(1003, new User(1003, 25,蔡依林));dao.update(1003, new User(1003, 35,方文山));dao.delete(1002);ListUser list dao.list();list.forEach(System.out::println);} }
http://www.dnsts.com.cn/news/106490.html

相关文章:

  • 免费源码html网站网站怎么更新网页内容
  • 一个做问卷调查的网站好网站内的地图导航怎么做
  • 南昌市新农村建设网站网站收录代做
  • 个人建站教程建设工程施工合同解除
  • 网站开发背景图模板杭州口碑最好的装修公司
  • html5 公司网站模板网站qq访客抓取
  • 北京网站建设公司排行榜使用cnnic证书的网站
  • 站长之家查询域名打电话做网站的话术
  • wordpress主题如何破解郑州seo课程
  • 承接做网站东莞 网站 建设
  • 网站排名查询工具网站制作和推广
  • 十堰市有几家网站公司电子商务公司注册资金
  • 浙江建设厅网站查询上海迈诺网站建设
  • 东莞做网站乐云seo娄底网站开发
  • wordpress 主题笔记东莞seo优化培训
  • 网站建设的体会安阳做网站推广最好的公司
  • 做电影网站会不会侵权西宁建设厅培训中心网站
  • asp 网站开发实例教程wordpress设置会员有效期
  • 网站建设运维做venn的网站
  • 制造动漫网站开发目的网站下模板做网站犯法
  • 网易网站开发如何利用NAS做网站
  • 北京州网站建设公司seo搜索引擎优化人员
  • 济南网站建设群Wordpress屏蔽国内iip
  • 爱站网为什么不能用了给网站做解答是干嘛的
  • 襄阳网站建设八零后长沙网络营销优势与劣势
  • 做视频网站侵权吗镇江久一信息科技
  • 建网站空间都有什么平台个人博客模板网站
  • 校园网站建设硬件采购wordpress主题 付费
  • 海外域名注册网站wordpress博客文章404
  • 网站如何交换链接色盲