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

网站后期维护价格怎么做网站关键词优化

网站后期维护价格,怎么做网站关键词优化,wordpress没注册按钮,九创 wordpress在 Java 开发中,泛型是一种强大的类型系统特性,但在运行时由于类型擦除,获取泛型信息往往具有挑战性。Spring Framework 提供了 ResolvableType 类,用于在运行时解析和处理复杂的泛型类型。 在探讨 ResolvableType 之前&#xff0…

在 Java 开发中,泛型是一种强大的类型系统特性,但在运行时由于类型擦除,获取泛型信息往往具有挑战性。Spring Framework 提供了 ResolvableType 类,用于在运行时解析和处理复杂的泛型类型。

在探讨 ResolvableType 之前,我们必须先理解问题的根源。Java的类型擦除机制意味着,在运行时,List 和 List 在JVM看来都是同一个 List.class。

如果我们试图通过原生反射获取一个泛型字段的具体类型,通常会这样做:

class MyService {public List<String> stringList;
}// 尝试获取 stringList 的泛型类型
Field field = MyService.class.getField("stringList");
Class<?> type = field.getType(); // 只能得到 java.util.List// 必须使用 getGenericType()
Type genericType = field.getGenericType(); // 得到 ParameterizedType: java.util.List<java.lang.String>if (genericType instanceof ParameterizedType) {ParameterizedType pt = (ParameterizedType) genericType;Type actualType = pt.getActualTypeArguments()[0]; // 得到 java.lang.StringSystem.out.println(actualType);
}

这看起来还能应付。但如果情况变得复杂呢?

class PageResponse<T> {private List<T> data;
}class UserResponse {public PageResponse<User> userPage;
}

如何获取 UserResponse.userPage.data 中 List 的 T 究竟是哪个类?

原生反射的道路会变得异常崎岖:你需要获取 userPage 字段的 ParameterizedType,从中解析出 PageResponse,再获取 PageResponse 的原始类型和它的类型变量 T,然后建立 T 到 User.class 的映射关系,最后再去解析 data 字段的 List… 这个过程不仅代码冗长,而且极易出错。

什么是 ResolvableType?

ResolvableType 是 Spring Framework(自 Spring 4.0 起引入)提供的一个工具类,位于 org.springframework.core 包中。它旨在解决 Java 运行时泛型类型擦除的问题,允许开发者以编程方式解析类、字段、方法参数或返回值的泛型类型信息。ResolvableType 提供了对复杂泛型结构的访问能力,例如嵌套泛型、数组、集合、接口等。

ResolvableType 的核心功能

ResolvableType 提供了丰富的 API,用于解析和操作类型信息。以下是其核心功能:

解析泛型类型:获取类、接口、字段或方法的泛型参数。
支持嵌套泛型:处理多层嵌套的泛型结构,如 List<Map<String, Integer>>。
类型层次结构:解析类或接口的继承关系。
数组和集合支持:处理数组、集合或映射类型的元素类型。
类型转换:与 Spring 的 TypeDescriptor 集成,用于类型转换和校验。

核心 API 和用法

以下通过代码示例详细介绍 ResolvableType 的常用方法和使用场景。

1. 创建 ResolvableType 实例
ResolvableType 提供了多种静态工厂方法来创建实例:

// 从 Class 创建
ResolvableType type = ResolvableType.forClass(List.class);// 从字段创建
Field field = MyClass.class.getDeclaredField("myList");
ResolvableType fieldType = ResolvableType.forField(field);// 从方法参数创建
Method method = MyClass.class.getDeclaredMethod("myMethod", List.class);
ResolvableType paramType = ResolvableType.forMethodParameter(method, 0);// 从方法返回值创建
ResolvableType returnType = ResolvableType.forMethodReturnType(method);

2. 解析泛型类型
ResolvableType 可以解析泛型参数。例如,假设有一个类:

public class MyClass {private List<String> myList;
}

可以通过以下代码获取 myList 的泛型类型:

   @Testvoid testResolvableType() throws NoSuchFieldException {Field field = MyClass.class.getDeclaredField("names");ResolvableType type = ResolvableType.forField(field);Class<?> genericType = type.getGeneric(0).resolve(); // 获取第一个泛型参数System.out.println(genericType); // 输出: class java.lang.String}

3. 处理嵌套泛型
对于复杂泛型,如 List<Map<String, Integer>>,ResolvableType 支持多级解析:

public class MyClass {private List<Map<String, Integer>> complexList;
}

解析代码如下:

@Test
void testResolvableType() throws NoSuchFieldException {Field field = MyClass.class.getDeclaredField("complexList");ResolvableType type = ResolvableType.forField(field);ResolvableType mapType = type.getGeneric(0); // 获取 Map<String, Integer>Class<?> keyType = mapType.getGeneric(0).resolve(); // 获取 Map 的 key 类型Class<?> valueType = mapType.getGeneric(1).resolve(); // 获取 Map 的 value 类型System.out.println(keyType); // 输出: class java.lang.StringSystem.out.println(valueType); // 输出: class java.lang.Integer
}

4. 处理继承和接口
ResolvableType 可以解析类的继承关系和接口的泛型信息。例如:

public class MyService implements Service<List<String>> {
}

解析接口的泛型类型:

   @Testvoid testResolvableType() throws NoSuchFieldException {ResolvableType type = ResolvableType.forClass(MyService.class);ResolvableType interfaceType = type.as(Service.class);Class<?> genericType = interfaceType.getGeneric(0).resolve();System.out.println(genericType); // 输出: class java.util.List}

5. 数组和集合
ResolvableType 支持数组和集合类型的解析。例如:

public class MyClass {private String[] stringArray;
}

解析数组元素类型:

@Test
void testResolvableType() throws NoSuchFieldException {Field field = MyClass.class.getDeclaredField("stringArray");ResolvableType type = ResolvableType.forField(field);Class<?> componentType = type.getComponentType().resolve();System.out.println(componentType); // 输出: class java.lang.String
}

6. 与 TypeDescriptor 集成
ResolvableType 可以与 Spring 的 TypeDescriptor 结合,用于类型转换和校验:

   @Testvoid testResolvableType() throws NoSuchFieldException {Field field = MyClass.class.getDeclaredField("myList");ResolvableType type = ResolvableType.forField(field);TypeDescriptor descriptor = new TypeDescriptor(type, null, null);System.out.println(descriptor.getType()); // 输出: java.util.List}

结论
ResolvableType 是 Spring Framework 中一个强大而灵活的工具,填补了 Java 运行时泛型类型解析的空白。它在依赖注入、类型转换和框架开发中发挥了重要作用。

http://www.dtcms.com/wzjs/169804.html

相关文章:

  • 代做网站地图百度搜索 手机
  • 网站建设个人工作室官网设计比较好看的网站
  • 网站制作方案列举五种网络营销模式
  • 开网店需要投资多少钱爱站网seo工具包
  • 响应式网站制作教程微博热搜榜排名今日
  • ui的含义网站建设网站快速排名推荐
  • 个人网站做交易类的赚钱吗关键词推广计划
  • 十大免费cad网站入口软件长春seo技术
  • 做拼多多网站赚钱吗湖南seo推广服务
  • 温州做网站建设公司qq代刷网站推广
  • 怎么做锅炉网站seo关键词排名优化的方法
  • 网站建立的方式是什么58同城如何发广告
  • 沈阳百度seo排名优化软件南昌seo营销
  • 电子商务网站开发问题研究百度网页版链接地址
  • 哪里有培训网站开发青岛关键词排名哪家好
  • 帝国cms 网站例子河北网站seo地址
  • 做网站要求的资料seo的工作内容
  • 用Html5做网站佛山网站优化排名推广
  • 惠阳营销网站制作国外seo网站
  • 手机网站 微网站抖音推广方案
  • 政府部门建设网站的必要性沈阳seo网站关键词优化
  • 连云港东海网站建设排名app
  • 制作人是干嘛的深圳关键词排名seo
  • 做网站需要的技术 规范上海网站seo招聘
  • 神码ai智能写作网站网络营销服务有哪些
  • 论坛网站怎么做跳转郑州百度网站优化排名
  • 做同业业务一般关注哪些网站南宁seo外包服务
  • 市场营销策划方案怎么写哈尔滨网站优化
  • shopify可以用来做B2B网站吗sem与seo的区别
  • 兰州做门户网站网络广告有哪些形式