org.springframework.core.ResolvableType.getComponentType()方法的使用及代码示例

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

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

ResolvableType.getComponentType介绍

[英]Return the ResolvableType representing the component type of the array or #NONE if this type does not represent an array.
[中]返回表示数组的组件类型的ResolvableType,如果此类型不表示数组,则返回#NONE。

代码示例

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

@Nullable
private Class<?> resolveClass() {
  if (this.type == EmptyType.INSTANCE) {
    return null;
  }
  if (this.type instanceof Class) {
    return (Class<?>) this.type;
  }
  if (this.type instanceof GenericArrayType) {
    Class<?> resolvedComponent = getComponentType().resolve();
    return (resolvedComponent != null ? Array.newInstance(resolvedComponent, 0).getClass() : null);
  }
  return resolveType().resolve();
}

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

/**
 * Returns {@code true} if the {@link Type} signature of both the supplied
 * {@link Method#getGenericParameterTypes() generic Method} and concrete {@link Method}
 * are equal after resolving all types against the declaringType, otherwise
 * returns {@code false}.
 */
private static boolean isResolvedTypeMatch(Method genericMethod, Method candidateMethod, Class<?> declaringClass) {
  Type[] genericParameters = genericMethod.getGenericParameterTypes();
  Class<?>[] candidateParameters = candidateMethod.getParameterTypes();
  if (genericParameters.length != candidateParameters.length) {
    return false;
  }
  for (int i = 0; i < candidateParameters.length; i++) {
    ResolvableType genericParameter = ResolvableType.forMethodParameter(genericMethod, i, declaringClass);
    Class<?> candidateParameter = candidateParameters[i];
    if (candidateParameter.isArray()) {
      // An array type: compare the component type.
      if (!candidateParameter.getComponentType().equals(genericParameter.getComponentType().toClass())) {
        return false;
      }
    }
    // A non-array type: compare the type itself.
    if (!candidateParameter.equals(genericParameter.toClass())) {
      return false;
    }
  }
  return true;
}

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

/**
 * Return the ResolvableType representing the component type of the array or
 * {@link #NONE} if this type does not represent an array.
 * @see #isArray()
 */
public ResolvableType getComponentType() {
  if (this == NONE) {
    return NONE;
  }
  if (this.componentType != null) {
    return this.componentType;
  }
  if (this.type instanceof Class) {
    Class<?> componentType = ((Class<?>) this.type).getComponentType();
    return forType(componentType, this.variableResolver);
  }
  if (this.type instanceof GenericArrayType) {
    return forType(((GenericArrayType) this.type).getGenericComponentType(), this.variableResolver);
  }
  return resolveType().getComponentType();
}

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

/**
 * Return a String representation of this type in its fully resolved form
 * (including any generic parameters).
 */
@Override
public String toString() {
  if (isArray()) {
    return getComponentType() + "[]";
  }
  if (this.resolved == null) {
    return "?";
  }
  if (this.type instanceof TypeVariable) {
    TypeVariable<?> variable = (TypeVariable<?>) this.type;
    if (this.variableResolver == null || this.variableResolver.resolveVariable(variable) == null) {
      // Don't bother with variable boundaries for toString()...
      // Can cause infinite recursions in case of self-references
      return "?";
    }
  }
  StringBuilder result = new StringBuilder(this.resolved.getName());
  if (hasGenerics()) {
    result.append('<');
    result.append(StringUtils.arrayToDelimitedString(getGenerics(), ", "));
    result.append('>');
  }
  return result.toString();
}

代码示例来源:origin: org.springframework/spring-core

@Nullable
private Class<?> resolveClass() {
  if (this.type == EmptyType.INSTANCE) {
    return null;
  }
  if (this.type instanceof Class) {
    return (Class<?>) this.type;
  }
  if (this.type instanceof GenericArrayType) {
    Class<?> resolvedComponent = getComponentType().resolve();
    return (resolvedComponent != null ? Array.newInstance(resolvedComponent, 0).getClass() : null);
  }
  return resolveType().resolve();
}

代码示例来源:origin: org.springframework.boot/spring-boot

private static ResolvableType box(ResolvableType type) {
  Class<?> resolved = type.resolve();
  if (resolved != null && resolved.isPrimitive()) {
    Object array = Array.newInstance(resolved, 1);
    Class<?> wrapperType = Array.get(array, 0).getClass();
    return ResolvableType.forClass(wrapperType);
  }
  if (resolved != null && resolved.isArray()) {
    return ResolvableType.forArrayComponent(box(type.getComponentType()));
  }
  return type;
}

代码示例来源:origin: org.springframework/spring-core

/**
 * Return the ResolvableType representing the component type of the array or
 * {@link #NONE} if this type does not represent an array.
 * @see #isArray()
 */
public ResolvableType getComponentType() {
  if (this == NONE) {
    return NONE;
  }
  if (this.componentType != null) {
    return this.componentType;
  }
  if (this.type instanceof Class) {
    Class<?> componentType = ((Class<?>) this.type).getComponentType();
    return forType(componentType, this.variableResolver);
  }
  if (this.type instanceof GenericArrayType) {
    return forType(((GenericArrayType) this.type).getGenericComponentType(), this.variableResolver);
  }
  return resolveType().getComponentType();
}

代码示例来源:origin: org.springframework/spring-core

/**
 * Return a String representation of this type in its fully resolved form
 * (including any generic parameters).
 */
@Override
public String toString() {
  if (isArray()) {
    return getComponentType() + "[]";
  }
  if (this.resolved == null) {
    return "?";
  }
  if (this.type instanceof TypeVariable) {
    TypeVariable<?> variable = (TypeVariable<?>) this.type;
    if (this.variableResolver == null || this.variableResolver.resolveVariable(variable) == null) {
      // Don't bother with variable boundaries for toString()...
      // Can cause infinite recursions in case of self-references
      return "?";
    }
  }
  StringBuilder result = new StringBuilder(this.resolved.getName());
  if (hasGenerics()) {
    result.append('<');
    result.append(StringUtils.arrayToDelimitedString(getGenerics(), ", "));
    result.append('>');
  }
  return result.toString();
}

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

for (int i = 2; i <= nestingLevel; i++) {
  if (result.isArray()) {
    result = result.getComponentType();

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

@Test
public void getComponentTypeForClassArray() throws Exception {
  Field field = Fields.class.getField("arrayClassType");
  ResolvableType type = ResolvableType.forField(field);
  assertThat(type.isArray(), equalTo(true));
  assertThat(type.getComponentType().getType(),
      equalTo((Type) ((Class) field.getGenericType()).getComponentType()));
}

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

Class<?> resolvedArrayType = resolvableType.resolve(type);
if (resolvedArrayType != type) {
  componentType = resolvableType.getComponentType().resolve();

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

@Test
public void resolveGenericArrayType() throws Exception {
  ResolvableType type = ResolvableType.forField(Fields.class.getField("genericArrayType"));
  assertThat(type.resolve(), equalTo((Class) List[].class));
  assertThat(type.getComponentType().resolve(), equalTo((Class) List.class));
  assertThat(type.getComponentType().getGeneric().resolve(), equalTo((Class) String.class));
}

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

@Test
public void getComponentTypeForNonArray() throws Exception {
  ResolvableType type = ResolvableType.forClass(String.class);
  assertThat(type.isArray(), equalTo(false));
  assertThat(type.getComponentType(), equalTo(ResolvableType.NONE));
}

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

@Test
public void resolveGenericMultiArrayType() throws Exception {
  ResolvableType type = ResolvableType.forField(Fields.class.getField("genericMultiArrayType"));
  assertThat(type.resolve(), equalTo((Class) List[][][].class));
  assertThat(type.getComponentType().resolve(), equalTo((Class) List[][].class));
}

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

@Test
public void getComponentTypeForGenericArrayType() throws Exception {
  ResolvableType type = ResolvableType.forField(Fields.class.getField("genericArrayType"));
  assertThat(type.isArray(), equalTo(true));
  assertThat(type.getComponentType().getType(),
      equalTo(((GenericArrayType) type.getType()).getGenericComponentType()));
}

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

@Test
public void getComponentTypeForVariableThatResolvesToGenericArray() throws Exception {
  ResolvableType type = ResolvableType.forClass(ListOfGenericArray.class).asCollection().getGeneric();
  assertThat(type.isArray(), equalTo(true));
  assertThat(type.getType(), instanceOf(TypeVariable.class));
  assertThat(type.getComponentType().getType().toString(),
      equalTo("java.util.List<java.lang.String>"));
}

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

/**
 * If this type is an array, returns the array's component type.
 * If this type is a {@code Stream}, returns the stream's component type.
 * If this type is a {@link Collection} and it is parameterized, returns the Collection's element type.
 * If the Collection is not parameterized, returns {@code null} indicating the element type is not declared.
 * @return the array component type or Collection element type, or {@code null} if this type is a
 * Collection but its element type is not parameterized
 * @throws IllegalStateException if this type is not a {@code java.util.Collection} or array type
 */
@Nullable
public TypeDescriptor getElementTypeDescriptor() {
  if (getResolvableType().isArray()) {
    return new TypeDescriptor(getResolvableType().getComponentType(), null, getAnnotations());
  }
  if (Stream.class.isAssignableFrom(getType())) {
    return getRelatedIfResolvable(this, getResolvableType().as(Stream.class).getGeneric(0));
  }
  return getRelatedIfResolvable(this, getResolvableType().asCollection().getGeneric(0));
}

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

return (other.isArray() && getComponentType().isAssignableFrom(other.getComponentType()));

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

@Test
public void noneReturnValues() throws Exception {
  ResolvableType none = ResolvableType.NONE;
  assertThat(none.as(Object.class), equalTo(ResolvableType.NONE));
  assertThat(none.asCollection(), equalTo(ResolvableType.NONE));
  assertThat(none.asMap(), equalTo(ResolvableType.NONE));
  assertThat(none.getComponentType(), equalTo(ResolvableType.NONE));
  assertThat(none.getGeneric(0), equalTo(ResolvableType.NONE));
  assertThat(none.getGenerics().length, equalTo(0));
  assertThat(none.getInterfaces().length, equalTo(0));
  assertThat(none.getSuperType(), equalTo(ResolvableType.NONE));
  assertThat(none.getType(), equalTo(ResolvableType.EmptyType.INSTANCE));
  assertThat(none.hasGenerics(), equalTo(false));
  assertThat(none.isArray(), equalTo(false));
  assertThat(none.resolve(), nullValue());
  assertThat(none.resolve(String.class), equalTo((Class) String.class));
  assertThat(none.resolveGeneric(0), nullValue());
  assertThat(none.resolveGenerics().length, equalTo(0));
  assertThat(none.toString(), equalTo("?"));
  assertThat(none.hasUnresolvableGenerics(), equalTo(false));
  assertThat(none.isAssignableFrom(ResolvableType.forClass(Object.class)), equalTo(false));
}

代码示例来源:origin: org.springframework/spring-core

/**
 * If this type is an array, returns the array's component type.
 * If this type is a {@code Stream}, returns the stream's component type.
 * If this type is a {@link Collection} and it is parameterized, returns the Collection's element type.
 * If the Collection is not parameterized, returns {@code null} indicating the element type is not declared.
 * @return the array component type or Collection element type, or {@code null} if this type is a
 * Collection but its element type is not parameterized
 * @throws IllegalStateException if this type is not a {@code java.util.Collection} or array type
 */
@Nullable
public TypeDescriptor getElementTypeDescriptor() {
  if (getResolvableType().isArray()) {
    return new TypeDescriptor(getResolvableType().getComponentType(), null, getAnnotations());
  }
  if (Stream.class.isAssignableFrom(getType())) {
    return getRelatedIfResolvable(this, getResolvableType().as(Stream.class).getGeneric(0));
  }
  return getRelatedIfResolvable(this, getResolvableType().asCollection().getGeneric(0));
}

相关文章

微信公众号

最新文章

更多