org.springframework.core.ResolvableType类的使用及代码示例

x33g5p2x  于2022-01-28 转载在 其他  
字(11.2k)|赞(0)|评价(0)|浏览(342)

本文整理了Java中org.springframework.core.ResolvableType类的一些代码示例,展示了ResolvableType类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。ResolvableType类的具体详情如下:
包路径:org.springframework.core.ResolvableType
类名称:ResolvableType

ResolvableType介绍

[英]Encapsulates a Java java.lang.reflect.Type, providing access to #getSuperType(), #getInterfaces(), and #getGeneric(int...) along with the ability to ultimately #resolve() to a java.lang.Class.

ResolvableTypes may be obtained from #forField(Field), #forMethodParameter(Method,int), #forMethodReturnType(Method) or #forClass(Class). Most methods on this class will themselves return ResolvableType, allowing easy navigation. For example:

private HashMap<Integer, List<String>> myMap; 
public void example() { 
ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap")); 
t.getSuperType(); // AbstractMap<Integer, List<String>> 
t.asMap(); // Map<Integer, List<String>> 
t.getGeneric(0).resolve(); // Integer 
t.getGeneric(1).resolve(); // List 
t.getGeneric(1); // List<String> 
t.resolveGeneric(1, 0); // String 
}

[中]封装Java。朗,反思一下。类型,提供对#getSuperType()、#getInterfaces()和#getGeneric(int…)的访问以及最终#解析()到java的能力。朗,同学们。
可解析类型可从#forField(字段)、#FormMethodParameter(方法,int)、#FormMethodReturnType(方法)或#forClass(类)中获取。这个类上的大多数方法本身都将返回ResolvableType,从而允许轻松导航。例如:

private HashMap<Integer, List<String>> myMap; 
public void example() { 
ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap")); 
t.getSuperType(); // AbstractMap<Integer, List<String>> 
t.asMap(); // Map<Integer, List<String>> 
t.getGeneric(0).resolve(); // Integer 
t.getGeneric(1).resolve(); // List 
t.getGeneric(1); // List<String> 
t.resolveGeneric(1, 0); // String 
}

代码示例

代码示例来源:origin: spring-projects/spring-framework

/**
 * Constructor with a fully initialized {@link HttpMessageWriter}.
 */
public HttpMessageWriterView(HttpMessageWriter<?> writer) {
  Assert.notNull(writer, "HttpMessageWriter is required");
  this.writer = writer;
  this.canWriteMap = writer.canWrite(ResolvableType.forClass(Map.class), null);
}

代码示例来源:origin: spring-projects/spring-framework

@Nullable
private static Class<?> getSingleGeneric(ResolvableType resolvableType) {
  Assert.isTrue(resolvableType.getGenerics().length == 1,
      () -> "Expected 1 type argument on generic interface [" + resolvableType +
      "] but found " + resolvableType.getGenerics().length);
  return resolvableType.getGeneric().resolve();
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return a {@link ResolvableType} for the specified {@link Constructor} parameter.
 * @param constructor the source constructor (must not be {@code null})
 * @param parameterIndex the parameter index
 * @return a {@link ResolvableType} for the specified constructor parameter
 * @see #forConstructorParameter(Constructor, int, Class)
 */
public static ResolvableType forConstructorParameter(Constructor<?> constructor, int parameterIndex) {
  Assert.notNull(constructor, "Constructor must not be null");
  return forMethodParameter(new MethodParameter(constructor, parameterIndex));
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Determine whether this {@code ResolvableType} is assignable from the
 * specified other type.
 * @param other the type to be checked against (as a {@code Class})
 * @since 4.2
 * @see #isAssignableFrom(ResolvableType)
 */
public boolean isAssignableFrom(Class<?> other) {
  return isAssignableFrom(forClass(other), null);
}

代码示例来源:origin: spring-projects/spring-framework

private Class<?> getPayloadType(MethodParameter parameter) {
  Type genericParamType = parameter.getGenericParameterType();
  ResolvableType resolvableType = ResolvableType.forType(genericParamType).as(Message.class);
  return resolvableType.getGeneric().toClass();
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return a {@link ResolvableType} for the specified {@link MethodParameter},
 * overriding the target type to resolve with a specific given type.
 * @param methodParameter the source method parameter (must not be {@code null})
 * @param targetType the type to resolve (a part of the method parameter's type)
 * @return a {@link ResolvableType} for the specified method parameter
 * @see #forMethodParameter(Method, int)
 */
public static ResolvableType forMethodParameter(MethodParameter methodParameter, @Nullable Type targetType) {
  Assert.notNull(methodParameter, "MethodParameter must not be null");
  ResolvableType owner = forType(methodParameter.getContainingClass()).as(methodParameter.getDeclaringClass());
  return forType(targetType, new MethodParameterTypeProvider(methodParameter), owner.asVariableResolver()).
      getNested(methodParameter.getNestingLevel(), methodParameter.typeIndexesPerLevel);
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Resolve the top-level parameter type of the given {@code MethodParameter}.
 * @param methodParameter the method parameter to resolve
 * @since 4.1.9
 * @see MethodParameter#setParameterType
 */
static void resolveMethodParameter(MethodParameter methodParameter) {
  Assert.notNull(methodParameter, "MethodParameter must not be null");
  ResolvableType owner = forType(methodParameter.getContainingClass()).as(methodParameter.getDeclaringClass());
  methodParameter.setParameterType(
      forType(null, new MethodParameterTypeProvider(methodParameter), owner.asVariableResolver()).resolve());
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return a {@link ResolvableType} for the specified {@link Method} return type.
 * Use this variant when the class that declares the method includes generic
 * parameter variables that are satisfied by the implementation class.
 * @param method the source for the method return type
 * @param implementationClass the implementation class
 * @return a {@link ResolvableType} for the specified method return
 * @see #forMethodReturnType(Method)
 */
public static ResolvableType forMethodReturnType(Method method, Class<?> implementationClass) {
  Assert.notNull(method, "Method must not be null");
  MethodParameter methodParameter = new MethodParameter(method, -1);
  methodParameter.setContainingClass(implementationClass);
  return forMethodParameter(methodParameter);
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Determine the target type for the generic return type of the given method,
 * where formal type variables are declared on the given class.
 * @param method the method to introspect
 * @param clazz the class to resolve type variables against
 * @return the corresponding generic parameter or return type
 */
public static Class<?> resolveReturnType(Method method, Class<?> clazz) {
  Assert.notNull(method, "Method must not be null");
  Assert.notNull(clazz, "Class must not be null");
  return ResolvableType.forMethodReturnType(method, clazz).resolve(method.getReturnType());
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return a {@link ResolvableType} as a array of the specified {@code componentType}.
 * @param componentType the component type
 * @return a {@link ResolvableType} as an array of the specified component type
 */
public static ResolvableType forArrayComponent(ResolvableType componentType) {
  Assert.notNull(componentType, "Component type must not be null");
  Class<?> arrayClass = Array.newInstance(componentType.resolve(), 0).getClass();
  return new ResolvableType(arrayClass, null, null, componentType);
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return a {@link ResolvableType} for the specified {@link Field} with the
 * given nesting level.
 * @param field the source field
 * @param nestingLevel the nesting level (1 for the outer level; 2 for a nested
 * generic type; etc)
 * @see #forField(Field)
 */
public static ResolvableType forField(Field field, int nestingLevel) {
  Assert.notNull(field, "Field must not be null");
  return forType(null, new FieldTypeProvider(field), null).getNested(nestingLevel);
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return a {@link ResolvableType} for the specified {@link Field}.
 * @param field the source field
 * @return a {@link ResolvableType} for the specified field
 * @see #forField(Field, Class)
 */
public static ResolvableType forField(Field field) {
  Assert.notNull(field, "Field must not be null");
  return forType(null, new FieldTypeProvider(field), null);
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Create a new type descriptor from a {@link Property}.
 * <p>Use this constructor when a source or target conversion point is a
 * property on a Java class.
 * @param property the property
 */
public TypeDescriptor(Property property) {
  Assert.notNull(property, "Property must not be null");
  this.resolvableType = ResolvableType.forMethodParameter(property.getMethodParameter());
  this.type = this.resolvableType.resolve(property.getType());
  this.annotatedElement = new AnnotatedElementAdapter(property.getAnnotations());
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * If this type is a {@link Map} and its key type is parameterized,
 * returns the map's key type. If the Map's key type is not parameterized,
 * returns {@code null} indicating the key type is not declared.
 * @return the Map key type, or {@code null} if this type is a Map
 * but its key type is not parameterized
 * @throws IllegalStateException if this type is not a {@code java.util.Map}
 */
@Nullable
public TypeDescriptor getMapKeyTypeDescriptor() {
  Assert.state(isMap(), "Not a [java.util.Map]");
  return getRelatedIfResolvable(this, getResolvableType().asMap().getGeneric(0));
}

代码示例来源:origin: spring-projects/spring-framework

@Nullable
static ResolvableType resolveDeclaredEventType(Class<?> listenerType) {
  ResolvableType eventType = eventTypeCache.get(listenerType);
  if (eventType == null) {
    eventType = ResolvableType.forClass(listenerType).as(ApplicationListener.class).getGeneric();
    eventTypeCache.put(listenerType, eventType);
  }
  return (eventType != ResolvableType.NONE ? eventType : null);
}

代码示例来源:origin: spring-projects/spring-framework

@Override
public boolean supportsReturnType(MethodParameter returnType) {
  if (StreamingResponseBody.class.isAssignableFrom(returnType.getParameterType())) {
    return true;
  }
  else if (ResponseEntity.class.isAssignableFrom(returnType.getParameterType())) {
    Class<?> bodyType = ResolvableType.forMethodParameter(returnType).getGeneric().resolve();
    return (bodyType != null && StreamingResponseBody.class.isAssignableFrom(bodyType));
  }
  return false;
}

代码示例来源:origin: spring-projects/spring-framework

@Nullable
private static Class<?> getCollectionParameterType(MethodParameter methodParam) {
  Class<?> paramType = methodParam.getNestedParameterType();
  if (Collection.class == paramType || List.class.isAssignableFrom(paramType)){
    Class<?> valueType = ResolvableType.forMethodParameter(methodParam).asCollection().resolveGeneric();
    if (valueType != null) {
      return valueType;
    }
  }
  return null;
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return the generic type of the {@code returnType} (or of the nested type
 * if it is an {@link HttpEntity}).
 */
private Type getGenericType(MethodParameter returnType) {
  if (HttpEntity.class.isAssignableFrom(returnType.getParameterType())) {
    return ResolvableType.forType(returnType.getGenericParameterType()).getGeneric().getType();
  }
  else {
    return returnType.getGenericParameterType();
  }
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Return a {@link ResolvableType} for the specified {@link Type}.
 * <p>Note: The resulting {@link ResolvableType} instance may not be {@link Serializable}.
 * @param type the source type (potentially {@code null})
 * @return a {@link ResolvableType} for the specified {@link Type}
 * @see #forType(Type, ResolvableType)
 */
public static ResolvableType forType(@Nullable Type type) {
  return forType(type, null, null);
}

代码示例来源:origin: spring-projects/spring-framework

/**
 * Determine whether the given object is an instance of this {@code ResolvableType}.
 * @param obj the object to check
 * @since 4.2
 * @see #isAssignableFrom(Class)
 */
public boolean isInstance(@Nullable Object obj) {
  return (obj != null && isAssignableFrom(obj.getClass()));
}

相关文章

微信公众号

最新文章

更多