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

wap购物网站模板下载雄县网站建设

wap购物网站模板下载,雄县网站建设,做网站优化价格,财税公司怎么找客源1. 泛型概述#xff1a;为什么需要泛型#xff1f; 在Java 5之前#xff0c;集合类#xff08;如ArrayList#xff09;只能存储Object类型#xff0c;使用时需要强制类型转换#xff0c;容易引发ClassCastException。泛型的引入解决了以下问题#xff1a; 类型安全为什么需要泛型 在Java 5之前集合类如ArrayList只能存储Object类型使用时需要强制类型转换容易引发ClassCastException。泛型的引入解决了以下问题 类型安全编译时检查类型避免运行时类型转换错误代码复用一套代码可以处理多种数据类型消除强制类型转换使代码更简洁、可读性更高 示例对比 // Java 5 之前非泛型 List list new ArrayList(); list.add(hello); String s (String) list.get(0); // 需要强制转换// 使用泛型 ListString list new ArrayList(); list.add(hello); String s list.get(0); // 自动类型推断2. 泛型的基本语法 2.1 泛型类 在类名后使用T定义类型参数 public class BoxT {private T content;public void setContent(T content) {this.content content;}public T getContent() {return content;} }// 使用示例 BoxString stringBox new Box(); stringBox.setContent(Hello); BoxInteger intBox new Box(); intBox.setContent(100);2.2 泛型方法 在方法返回类型前定义类型参数 public T T getFirstElement(ListT list) {if (list null || list.isEmpty()) {return null;}return list.get(0); }// 使用示例 ListString names Arrays.asList(Alice, Bob); String first getFirstElement(names); // 自动类型推断2.3 泛型接口 public interface RepositoryT {void save(T entity);T findById(int id); }// 实现示例 public class UserRepository implements RepositoryUser {Overridepublic void save(User user) { /* ... */ }Overridepublic User findById(int id) { /* ... */ } }3. 泛型的高级特性 3.1 类型通配符Wildcards 用于处理未知类型的泛型集合 语法说明示例?无限定通配符未知类型List?? extends T上界通配符T或其子类List? extends Number? super T下界通配符T或其父类List? super Integer 示例处理不同数值类型的集合 public static double sum(List? extends Number numbers) {double sum 0.0;for (Number num : numbers) {sum num.doubleValue();}return sum; }// 使用示例 ListInteger ints Arrays.asList(1, 2, 3); ListDouble doubles Arrays.asList(1.1, 2.2); System.out.println(sum(ints)); // 输出 6.0 System.out.println(sum(doubles)); // 输出 3.33.2 类型擦除Type Erasure Java泛型在编译后会进行类型擦除转换为原始类型 泛型类中的T会被替换为Object或上界类型泛型方法中的类型参数会被移除 示例编译后的代码 // 源代码 public class BoxT {private T content;public T getContent() { return content; } }// 编译后类型擦除 public class Box {private Object content;public Object getContent() { return content; } }3.3 泛型与数组的限制 由于类型擦除Java不允许直接创建泛型数组 // 编译错误 T[] array new T[10];// 正确做法使用Object数组类型转换 T[] array (T[]) new Object[10];4. 泛型实战案例 4.1 实现通用缓存工具类 public class CacheK, V {private final MapK, V cache new HashMap();public void put(K key, V value) {cache.put(key, value);}public V get(K key) {return cache.get(key);}public void remove(K key) {cache.remove(key);} }// 使用示例 CacheString, User userCache new Cache(); userCache.put(user1, new User(Alice)); User user userCache.get(user1);4.2 构建类型安全的Builder模式 public class PersonBuilderT extends PersonBuilderT {protected Person person new Person();public T name(String name) {person.setName(name);return self();}public T age(int age) {person.setAge(age);return self();}protected T self() {return (T) this;}public Person build() {return person;} }// 子类扩展 public class EmployeeBuilder extends PersonBuilderEmployeeBuilder {public EmployeeBuilder department(String department) {((Employee) person).setDepartment(department);return this;} }// 使用示例 Employee emp new EmployeeBuilder().name(Bob).age(30).department(IT).build();4.3 实现通用Comparator public class GenericComparatorT implements ComparatorT {private final FunctionT, Comparable keyExtractor;public GenericComparator(FunctionT, Comparable keyExtractor) {this.keyExtractor keyExtractor;}Overridepublic int compare(T a, T b) {return keyExtractor.apply(a).compareTo(keyExtractor.apply(b));} }// 使用示例 ListPerson people Arrays.asList(new Person(Alice, 25),new Person(Bob, 30) );people.sort(new GenericComparator(Person::getName)); // 按姓名排序 people.sort(new GenericComparator(Person::getAge)); // 按年龄排序5. 泛型的最佳实践 命名约定 T通用类型E集合元素类型K/V键值对中的键和值N数字类型 避免使用原生类型 // 不推荐 List list new ArrayList(); // 推荐 ListString list new ArrayList();优先使用泛型方法 // 不推荐 class Utils {public static void printList(ListObject list) { ... } } // 推荐 public static T void printList(ListT list) { ... }谨慎使用通配符 List?只读操作不能添加元素List? extends T生产者只能读取List? super T消费者可以写入 6. 常见问题解答 Q1泛型能否用于静态方法 // 可以静态方法需要单独声明类型参数 public static T T getFirst(ListT list) { ... }Q2如何检查泛型类型 由于类型擦除运行时无法直接获取泛型类型 // 错误方式 if (obj instanceof ListString) { ... }// 正确方式检查原始类型 if (obj instanceof List) { ... }Q3泛型与反射如何结合 可以通过ParameterizedType获取泛型信息 Type type myList.getClass().getGenericSuperclass(); if (type instanceof ParameterizedType) {Type[] typeArgs ((ParameterizedType) type).getActualTypeArguments();Class? clazz (Class?) typeArgs[0];System.out.println(泛型类型: clazz.getName()); }7. 总结 Java泛型是提升代码安全性和可重用性的强大工具。关键要点 使用泛型类/方法/接口避免重复代码通配符?, ? extends T, ? super T提供灵活的API设计理解类型擦除机制避免运行时类型问题结合设计模式如Builder、Factory发挥泛型最大价值 进一步学习 Oracle官方泛型教程《Effective Java》第5章泛型TypeTokenGson解决类型擦除问题 你在使用泛型时遇到过哪些问题欢迎在评论区讨论
http://www.dnsts.com.cn/news/189030.html

相关文章:

  • 网站建设 淘宝客末班旅游网站建设与规划
  • 建设金融网站哪家好手工制作方法
  • 微信公众号内嵌网站开发中国做出口的网站平台
  • 网站建设维护合同模板最好企业网站
  • 无锡网站建设818gx大连工业大学图书馆
  • 设计比较有特色的网站近三天发生的国际新闻
  • 一个正规的网站建设公司用html5做的网站源码
  • 洛阳网站改版wordpress登录界面
  • 上海医疗器械网站前置审批网站建设的模板
  • 外贸网站平台哪个好信息港官网
  • 公司网站设计与开发网站建设策划案模版
  • 黄冈网站推广下载网站建设产品服务
  • 在线培训网站怎么做详情页设计公司
  • 南京市鼓楼区建设局网站网站与网页的区别.
  • 几十万做网站平台全网推广开户
  • 自建网站和第三方平台我想做个卷帘门网站怎么做
  • 太原建站模板大全大连的网站制作公司
  • 网站开发费用周期柳市建设网站
  • 好的网站建设网石家庄建设局网站
  • 医院网站建设的重要性自动点击关键词软件
  • 网站制作和如何推广wordpress添加qq聊天
  • 织梦网站图片移动wordpress小说主题网站
  • 怎么查自己的网站备案编号专业的菏泽网站建设
  • 制作网站商城荆州市城市建设投资开发有限公司网站
  • 谈网站优化的外部链接质量哪些公司提供微信做网站服务
  • 响应式网站高度如何计算wordpress模板主题实例实战教程
  • 邯郸做网站优化wordpress会员模块
  • 阜蒙县建设学校网站是什么公众号代运营费用
  • 关于戒烟网站怎么做长春网络科技公司排名
  • 技术支持 贵阳贵阳网站建设成都装修公司招聘装修工人