Java 类java.lang.reflect.TypeVariable 实例源码

项目:GitHub    文件:FastJsonHttpMessageConverter.java   
private static ResolvableType resolveVariable(TypeVariable<?> typeVariable, ResolvableType contextType) {
    ResolvableType resolvedType;
    if (contextType.hasGenerics()) {
        resolvedType = ResolvableType.forType(typeVariable, contextType);
        if (resolvedType.resolve() != null) {
            return resolvedType;
        }
    }

    ResolvableType superType = contextType.getSuperType();
    if (superType != ResolvableType.NONE) {
        resolvedType = resolveVariable(typeVariable, superType);
        if (resolvedType.resolve() != null) {
            return resolvedType;
        }
    }
    for (ResolvableType ifc : contextType.getInterfaces()) {
        resolvedType = resolveVariable(typeVariable, ifc);
        if (resolvedType.resolve() != null) {
            return resolvedType;
        }
    }
    return ResolvableType.NONE;
}
项目:GitHub    文件:TypeUtils.java   
public static Class<?> getClass(Type type){
    if(type.getClass() == Class.class){
        return (Class<?>) type;
    }

    if(type instanceof ParameterizedType){
        return getClass(((ParameterizedType) type).getRawType());
    }

    if(type instanceof TypeVariable){
        Type boundType = ((TypeVariable<?>) type).getBounds()[0];
        return (Class<?>) boundType;
    }

    if(type instanceof WildcardType){
        Type[] upperBounds = ((WildcardType) type).getUpperBounds();
        if (upperBounds.length == 1) {
            return getClass(upperBounds[0]);
        }
    }

    return Object.class;
}
项目:koryphe    文件:Signature.java   
protected static Class getTypeClass(final Type type, final Map<TypeVariable<?>, Type> typeArgs) {
    Type rawType = type;
    if (type instanceof ParameterizedType) {
        rawType = ((ParameterizedType) type).getRawType();
    }

    if (rawType instanceof Class) {
        return (Class) rawType;
    }


    if (rawType instanceof TypeVariable) {
        final Type t = typeArgs.get(rawType);
        if (null != t) {
            return getTypeClass(t, typeArgs);
        }
    }
    // cannot resolve - default to UnknownGenericType;
    return UnknownGenericType.class;
}
项目:uroborosql    文件:JavaType.java   
@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    Class<?> rawType = getRawType();
    if (!rawType.isArray()) {
        sb.append(rawType.getName());
    } else {
        sb.append(rawType.getComponentType().getName());
    }
    TypeVariable<? extends Class<?>>[] typeParameters = rawType.getTypeParameters();
    if (typeParameters.length > 0) {
        sb.append("<");
        for (int i = 0; i < typeParameters.length; i++) {
            if (i > 0) {
                sb.append(", ");
            }
            String s = this.getParam(i).toParamString();
            sb.append(s);
        }
        sb.append(">");
    }
    if (rawType.isArray()) {
        sb.append("[]");
    }
    return sb.toString();
}
项目:r8    文件:Minifygeneric.java   
private static void checkOneParameterType(ParameterizedType toCheck, Class<?> rawType,
    Class<?>... bounds) {
  System.out.println(((Class<?>) toCheck.getRawType()).getName()
      .equals(rawType.getName()));
  Type[] parameters = toCheck.getActualTypeArguments();
  System.out.println(parameters.length);
  TypeVariable<?> parameter = (TypeVariable<?>) parameters[0];
  System.out.println(parameter.getName());
  Type[] actualBounds = parameter.getBounds();
  for (int i = 0; i < bounds.length; i++) {
    System.out.println(((Class<?>) actualBounds[i]).getName().equals(bounds[i].getName()));
  }
}
项目:Fluf    文件:TypeLiteral.java   
/**
 * Constructs a new type literal. Derives represented class from type
 * parameter.
 * 
 * <p>
 * Clients create an empty anonymous subclass. Doing so embeds the type
 * parameter in the anonymous class's type hierarchy so we can reconstitute
 * it at runtime despite erasure.
 */
public TypeLiteral() {
    ParameterizedType genClass = (ParameterizedType) getClass().getGenericSuperclass();
    Type[] types = genClass.getActualTypeArguments();
    if (types == null || types.length == 0) {
        throw new RuntimeException("TypeLiteral<T> must have a specfied type <T>");
    }
    this.type = types[0];
    if (this.type instanceof GenericArrayType)
        throw new RuntimeException("TypeLiteral does not support GenericArrayTypes, use Injector.get(ComponentType[].class)");
    if (this.type instanceof TypeVariable)
        throw new RuntimeException("TypeLiteral does not support TypeVariables");

    if (type instanceof Class) {
        this.rawType = (Class<T>) this.type;
    } else if (type instanceof ParameterizedType) {
        this.rawType =  (Class<T>) ((ParameterizedType) type).getRawType();
    } else {
        this.rawType = Object.class;
    }
}
项目:AndroidBasicLibs    文件:ClassUtil.java   
public static Class getGenericClass(ParameterizedType parameterizedType, int i) {
    Object genericClass = parameterizedType.getActualTypeArguments()[i];
    if (genericClass instanceof ParameterizedType) { // 处理多级泛型
        return (Class) ((ParameterizedType) genericClass).getRawType();
    } else if (genericClass instanceof GenericArrayType) { // 处理数组泛型
        return (Class) ((GenericArrayType) genericClass).getGenericComponentType();
    } else if (genericClass instanceof TypeVariable) { // 处理泛型擦拭对象
        return (Class) getClass(((TypeVariable) genericClass).getBounds()[0], 0);
    } else {
        return (Class) genericClass;
    }
}
项目:guava-mock    文件:TypesTest.java   
public void testNewTypeVariable() throws Exception {
  TypeVariable<?> noBoundJvmType =
      WithTypeVariable.getTypeVariable("withoutBound");
  TypeVariable<?> objectBoundJvmType =
      WithTypeVariable.getTypeVariable("withObjectBound");
  TypeVariable<?> upperBoundJvmType =
      WithTypeVariable.getTypeVariable("withUpperBound");
  TypeVariable<?> noBound = withBounds(noBoundJvmType);
  TypeVariable<?> objectBound = withBounds(objectBoundJvmType, Object.class);
  TypeVariable<?> upperBound = withBounds(
      upperBoundJvmType, Number.class, CharSequence.class);

  assertEqualTypeVariable(noBoundJvmType, noBound);
  assertEqualTypeVariable(noBoundJvmType,
      withBounds(noBoundJvmType, Object.class));
  assertEqualTypeVariable(objectBoundJvmType, objectBound);
  assertEqualTypeVariable(upperBoundJvmType, upperBound);

  new TypeVariableEqualsTester()
      .addEqualityGroup(noBoundJvmType, noBound)
      .addEqualityGroup(objectBoundJvmType, objectBound)
      .addEqualityGroup(upperBoundJvmType, upperBound)
      .testEquals();
}
项目:thingplug-sdk-android    文件:MQTTUtils.java   
static boolean hasUnresolvableType(Type type) {
    if (type instanceof Class<?>) {
        return false;
    }
    if (type instanceof ParameterizedType) {
        ParameterizedType parameterizedType = (ParameterizedType) type;
        for (Type typeArgument : parameterizedType.getActualTypeArguments()) {
            if (hasUnresolvableType(typeArgument)) {
                return true;
            }
        }
        return false;
    }
    if (type instanceof GenericArrayType) {
        return hasUnresolvableType(((GenericArrayType) type).getGenericComponentType());
    }
    if (type instanceof TypeVariable) {
        return true;
    }
    if (type instanceof WildcardType) {
        return true;
    }
    String className = type == null ? "null" : type.getClass().getName();
    throw new IllegalArgumentException("Expected a Class, ParameterizedType, or "
            + "GenericArrayType, but <" + type + "> is of type " + className);
}
项目:uavstack    文件:FieldInfo.java   
public static Type getInheritGenericType(Class<?> clazz, TypeVariable<?> tv) {
    Type type = null;
    GenericDeclaration gd = tv.getGenericDeclaration();
    do {
        type = clazz.getGenericSuperclass();
        if (type == null) {
            return null;
        }
        if (type instanceof ParameterizedType) {
            ParameterizedType ptype = (ParameterizedType) type;
            if (ptype.getRawType() == gd) {
                TypeVariable<?>[] tvs = gd.getTypeParameters();
                Type[] types = ptype.getActualTypeArguments();
                for (int i = 0; i < tvs.length; i++) {
                    if (tvs[i] == tv) return types[i];
                }
                return null;
            }
        }
        clazz = TypeUtils.getClass(type);
    } while (type != null);
    return null;
}
项目:guava-mock    文件:TypeResolver.java   
/**
 * Resolves all type variables in {@code type} and all downstream types and returns a
 * corresponding type with type variables resolved.
 */
public Type resolveType(Type type) {
  checkNotNull(type);
  if (type instanceof TypeVariable) {
    return typeTable.resolve((TypeVariable<?>) type);
  } else if (type instanceof ParameterizedType) {
    return resolveParameterizedType((ParameterizedType) type);
  } else if (type instanceof GenericArrayType) {
    return resolveGenericArrayType((GenericArrayType) type);
  } else if (type instanceof WildcardType) {
    return resolveWildcardType((WildcardType) type);
  } else {
    // if Class<?>, no resolution needed, we are done.
    return type;
  }
}
项目:guava-mock    文件:TypeResolver.java   
private WildcardCapturer forTypeVariable(final TypeVariable<?> typeParam) {
  return new WildcardCapturer(id) {
    @Override TypeVariable<?> captureAsTypeVariable(Type[] upperBounds) {
      Set<Type> combined = new LinkedHashSet<>(asList(upperBounds));
      // Since this is an artifically generated type variable, we don't bother checking
      // subtyping between declared type bound and actual type bound. So it's possible that we
      // may generate something like <capture#1-of ? extends Foo&SubFoo>.
      // Checking subtype between declared and actual type bounds
      // adds recursive isSubtypeOf() call and feels complicated.
      // There is no contract one way or another as long as isSubtypeOf() works as expected.
      combined.addAll(asList(typeParam.getBounds()));
      if (combined.size() > 1) { // Object is implicit and only useful if it's the only bound.
        combined.remove(Object.class);
      }
      return super.captureAsTypeVariable(combined.toArray(new Type[0]));
    }
  };
}
项目:koryphe    文件:Signature.java   
private static Signature createSignature(final Object input, final Type type, final Map<TypeVariable<?>, Type> typeArgs, final boolean isInput) {
    final Class clazz = getTypeClass(type, typeArgs);

    if (Tuple.class.isAssignableFrom(clazz)) {
        final TypeVariable[] tupleTypes = getTypeClass(type, typeArgs).getTypeParameters();
        final Map<TypeVariable<?>, Type> classTypeArgs = TypeUtils.getTypeArguments(type, clazz);
        Collection<? extends Type> types = TypeUtils.getTypeArguments(type, clazz).values();
        Class[] classes = new Class[types.size()];
        int i = 0;
        for (final TypeVariable tupleType : tupleTypes) {
            classes[i++] = getTypeClass(classTypeArgs.get(tupleType), typeArgs);
        }

        return new TupleSignature(input, clazz, classes, isInput);
    }

    return new SingletonSignature(input, clazz, isInput);
}
项目:jsouplib    文件:Resource.java   
private static Type substituteTypeVariables(Map<String, Type> lookup, Type type) {
    if (type instanceof TypeVariable) {
        return translateTypeVariable(lookup, (TypeVariable) type);
    }
    if (type instanceof ParameterizedType) {
        ParameterizedType pType = (ParameterizedType) type;
        Type[] args = pType.getActualTypeArguments();
        for (int i = 0; i < args.length; i++) {
            args[i] = substituteTypeVariables(lookup, args[i]);
        }
        return new ParameterizedTypeImpl(args, pType.getOwnerType(), pType.getRawType());
    }
    if (type instanceof GenericArrayType) {
        GenericArrayType gaType = (GenericArrayType) type;
        return new GenericArrayTypeImpl(substituteTypeVariables(lookup, gaType.getGenericComponentType()));
    }
    return type;
}
项目:guava-mock    文件:TypeToken.java   
/**
 * Returns the generic superclass of this type or {@code null} if the type represents
 * {@link Object} or an interface. This method is similar but different from
 * {@link Class#getGenericSuperclass}. For example, {@code new TypeToken<StringArrayList>()
 * {}.getGenericSuperclass()} will return {@code new TypeToken<ArrayList<String>>() {}}; while
 * {@code StringArrayList.class.getGenericSuperclass()} will return {@code ArrayList<E>}, where
 * {@code E} is the type variable declared by class {@code ArrayList}.
 *
 * <p>If this type is a type variable or wildcard, its first upper bound is examined and returned
 * if the bound is a class or extends from a class. This means that the returned type could be a
 * type variable too.
 */
@Nullable
final TypeToken<? super T> getGenericSuperclass() {
  if (runtimeType instanceof TypeVariable) {
    // First bound is always the super class, if one exists.
    return boundAsSuperclass(((TypeVariable<?>) runtimeType).getBounds()[0]);
  }
  if (runtimeType instanceof WildcardType) {
    // wildcard has one and only one upper bound.
    return boundAsSuperclass(((WildcardType) runtimeType).getUpperBounds()[0]);
  }
  Type superclass = getRawType().getGenericSuperclass();
  if (superclass == null) {
    return null;
  }
  @SuppressWarnings("unchecked") // super class of T
  TypeToken<? super T> superToken = (TypeToken<? super T>) resolveSupertype(superclass);
  return superToken;
}
项目:guava-mock    文件:TypeToken.java   
/**
 * Returns the generic interfaces that this type directly {@code implements}. This method is
 * similar but different from {@link Class#getGenericInterfaces()}. For example, {@code new
 * TypeToken<List<String>>() {}.getGenericInterfaces()} will return a list that contains
 * {@code new TypeToken<Iterable<String>>() {}}; while {@code List.class.getGenericInterfaces()}
 * will return an array that contains {@code Iterable<T>}, where the {@code T} is the type
 * variable declared by interface {@code Iterable}.
 *
 * <p>If this type is a type variable or wildcard, its upper bounds are examined and those that
 * are either an interface or upper-bounded only by interfaces are returned. This means that the
 * returned types could include type variables too.
 */
final ImmutableList<TypeToken<? super T>> getGenericInterfaces() {
  if (runtimeType instanceof TypeVariable) {
    return boundsAsInterfaces(((TypeVariable<?>) runtimeType).getBounds());
  }
  if (runtimeType instanceof WildcardType) {
    return boundsAsInterfaces(((WildcardType) runtimeType).getUpperBounds());
  }
  ImmutableList.Builder<TypeToken<? super T>> builder = ImmutableList.builder();
  for (Type interfaceType : getRawType().getGenericInterfaces()) {
    @SuppressWarnings("unchecked") // interface of T
    TypeToken<? super T> resolvedInterface =
        (TypeToken<? super T>) resolveSupertype(interfaceType);
    builder.add(resolvedInterface);
  }
  return builder.build();
}
项目:guava-mock    文件:TypeToken.java   
/**
 * Returns the generic form of {@code superclass}. For example, if this is
 * {@code ArrayList<String>}, {@code Iterable<String>} is returned given the input
 * {@code Iterable.class}.
 */
public final TypeToken<? super T> getSupertype(Class<? super T> superclass) {
  checkArgument(
      this.someRawTypeIsSubclassOf(superclass),
      "%s is not a super class of %s",
      superclass,
      this);
  if (runtimeType instanceof TypeVariable) {
    return getSupertypeFromUpperBounds(superclass, ((TypeVariable<?>) runtimeType).getBounds());
  }
  if (runtimeType instanceof WildcardType) {
    return getSupertypeFromUpperBounds(superclass, ((WildcardType) runtimeType).getUpperBounds());
  }
  if (superclass.isArray()) {
    return getArraySupertype(superclass);
  }
  @SuppressWarnings("unchecked") // resolved supertype
  TypeToken<? super T> supertype =
      (TypeToken<? super T>) resolveSupertype(toGenericType(superclass).runtimeType);
  return supertype;
}
项目:lams    文件:$Gson$Types.java   
static Type resolveTypeVariable(Type context, Class<?> contextRawType, TypeVariable<?> unknown) {
  Class<?> declaredByRaw = declaringClassOf(unknown);

  // we can't reduce this further
  if (declaredByRaw == null) {
    return unknown;
  }

  Type declaredBy = getGenericSupertype(context, contextRawType, declaredByRaw);
  if (declaredBy instanceof ParameterizedType) {
    int index = indexOf(declaredByRaw.getTypeParameters(), unknown);
    return ((ParameterizedType) declaredBy).getActualTypeArguments()[index];
  }

  return unknown;
}
项目:Reer    文件:ParameterizedTypeWrapper.java   
public ParameterizedTypeWrapper substitute(TypeVariable<?> typeVariable, TypeWrapper type) {
    TypeWrapper[] newArguments = new TypeWrapper[actualTypeArguments.length];
    for (int i = 0; i < newArguments.length; i++) {
        TypeWrapper argument = actualTypeArguments[i];
        if (argument instanceof TypeVariableTypeWrapper) {
            TypeVariableTypeWrapper candidate = (TypeVariableTypeWrapper) argument;
            if (candidate.getName().equals(typeVariable.getName())) {
                newArguments[i] = type;
                continue;
            }
        }
        newArguments[i] = argument;
    }
    return new ParameterizedTypeWrapper(newArguments, rawType, ownerType);
}
项目:googles-monorepo-demo    文件:Invokable.java   
/**
 * If the class is parameterized, such as {@link java.util.ArrayList ArrayList}, this returns
 * {@code ArrayList<E>}.
 */
@Override
Type getGenericReturnType() {
  Class<?> declaringClass = getDeclaringClass();
  TypeVariable<?>[] typeParams = declaringClass.getTypeParameters();
  if (typeParams.length > 0) {
    return Types.newParameterizedType(declaringClass, typeParams);
  } else {
    return declaringClass;
  }
}
项目:googles-monorepo-demo    文件:TypeParameterTest.java   
public <T> void testCaptureTypeParameter() throws Exception {
  TypeVariable<?> variable = new TypeParameter<T>() {}.typeVariable;
  TypeVariable<?> expected = TypeParameterTest.class
      .getDeclaredMethod("testCaptureTypeParameter")
      .getTypeParameters()[0];
  assertEquals(expected, variable);
}
项目:googles-monorepo-demo    文件:TypeResolver.java   
/**
 * Returns true if {@code type} is a {@code TypeVariable} with the same name and declared by the
 * same {@code GenericDeclaration}.
 */
boolean equalsType(Type type) {
  if (type instanceof TypeVariable) {
    return equalsTypeVariable((TypeVariable<?>) type);
  } else {
    return false;
  }
}
项目:thingplug-sdk-android    文件:MQTTUtils.java   
static Class<?> getRawType(Type type) {
    if (type == null) throw new NullPointerException("type == null");

    if (type instanceof Class<?>) {
        // Type is a normal class.
        return (Class<?>) type;
    }
    if (type instanceof ParameterizedType) {
        ParameterizedType parameterizedType = (ParameterizedType) type;

        // I'm not exactly sure why getRawType() returns Type instead of Class. Neal isn't either but
        // suspects some pathological case related to nested classes exists.
        Type rawType = parameterizedType.getRawType();
        if (!(rawType instanceof Class)) throw new IllegalArgumentException();
        return (Class<?>) rawType;
    }
    if (type instanceof GenericArrayType) {
        Type componentType = ((GenericArrayType) type).getGenericComponentType();
        return Array.newInstance(getRawType(componentType), 0).getClass();
    }
    if (type instanceof TypeVariable) {
        // We could use the variable's bounds, but that won't work if there are multiple. Having a raw
        // type that's more general than necessary is okay.
        return Object.class;
    }
    if (type instanceof WildcardType) {
        return getRawType(((WildcardType) type).getUpperBounds()[0]);
    }

    throw new IllegalArgumentException("Expected a Class, ParameterizedType, or "
            + "GenericArrayType, but <" + type + "> is of type " + type.getClass().getName());
}
项目:odoo-work    文件:$Gson$Types.java   
/**
 * Returns the declaring class of {@code typeVariable}, or {@code null} if it was not declared by
 * a class.
 */
private static Class<?> declaringClassOf(TypeVariable<?> typeVariable) {
  GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();
  return genericDeclaration instanceof Class
      ? (Class<?>) genericDeclaration
      : null;
}
项目:googles-monorepo-demo    文件:Invokable.java   
/**
 * {@inheritDoc}
 *
 * {@code [<E>]} will be returned for ArrayList's constructor. When both the class and the
 * constructor have type parameters, the class parameters are prepended before those of the
 * constructor's. This is an arbitrary rule since no existing language spec mandates one way or
 * the other. From the declaration syntax, the class type parameter appears first, but the call
 * syntax may show up in opposite order such as {@code new <A>Foo<B>()}.
 */
@Override
public final TypeVariable<?>[] getTypeParameters() {
  TypeVariable<?>[] declaredByClass = getDeclaringClass().getTypeParameters();
  TypeVariable<?>[] declaredByConstructor = constructor.getTypeParameters();
  TypeVariable<?>[] result =
      new TypeVariable<?>[declaredByClass.length + declaredByConstructor.length];
  System.arraycopy(declaredByClass, 0, result, 0, declaredByClass.length);
  System.arraycopy(
      declaredByConstructor, 0,
      result, declaredByClass.length,
      declaredByConstructor.length);
  return result;
}
项目:inspector    文件:Types.java   
public static Class<?> getRawType(Type type) {
  if (type instanceof Class<?>) {
    // type is a normal class.
    return (Class<?>) type;

  } else if (type instanceof ParameterizedType) {
    ParameterizedType parameterizedType = (ParameterizedType) type;

    // I'm not exactly sure why getRawType() returns Type instead of Class. Neal isn't either but
    // suspects some pathological case related to nested classes exists.
    Type rawType = parameterizedType.getRawType();
    return (Class<?>) rawType;

  } else if (type instanceof GenericArrayType) {
    Type componentType = ((GenericArrayType) type).getGenericComponentType();
    return Array.newInstance(getRawType(componentType), 0).getClass();

  } else if (type instanceof TypeVariable) {
    // We could use the variable's bounds, but that won't work if there are multiple. having a raw
    // type that's more general than necessary is okay.
    return Object.class;

  } else if (type instanceof WildcardType) {
    return getRawType(((WildcardType) type).getUpperBounds()[0]);

  } else {
    String className = type == null ? "null" : type.getClass().getName();
    throw new IllegalArgumentException("Expected a Class, ParameterizedType, or "
        + "GenericArrayType, but <" + type + "> is of type " + className);
  }
}
项目:GitHub    文件:JavaObjectDeserializer.java   
@SuppressWarnings("unchecked")
public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
    if (type instanceof GenericArrayType) {
        Type componentType = ((GenericArrayType) type).getGenericComponentType();
        if (componentType instanceof TypeVariable) {
            TypeVariable<?> componentVar = (TypeVariable<?>) componentType;
            componentType = componentVar.getBounds()[0];
        }

        List<Object> list = new ArrayList<Object>();
        parser.parseArray(componentType, list);
        Class<?> componentClass;
        if (componentType instanceof Class) {
            componentClass = (Class<?>) componentType;
            Object[] array = (Object[]) Array.newInstance(componentClass, list.size());
            list.toArray(array);
            return (T) array;
        } else {
            return (T) list.toArray();
        }

    }

    if (type instanceof Class && type != Object.class && type != Serializable.class) {
        return (T) parser.parseObject(type);    
    }

    return (T) parser.parse(fieldName);
}
项目:openjdk-jdk10    文件:GenericDeclRepository.java   
/**
 * Returns the formal type parameters of this generic declaration.
 * @return the formal type parameters of this generic declaration
 */
public TypeVariable<?>[] getTypeParameters() {
    TypeVariable<?>[] value = typeParameters;
    if (value == null) {
        value = computeTypeParameters();
        typeParameters = value;
    }
    return value.clone();
}
项目:googles-monorepo-demo    文件:TypeResolver.java   
final Type resolve(final TypeVariable<?> var) {
  final TypeTable unguarded = this;
  TypeTable guarded =
      new TypeTable() {
        @Override
        public Type resolveInternal(TypeVariable<?> intermediateVar, TypeTable forDependent) {
          if (intermediateVar.getGenericDeclaration().equals(var.getGenericDeclaration())) {
            return intermediateVar;
          }
          return unguarded.resolveInternal(intermediateVar, forDependent);
        }
      };
  return resolveInternal(var, guarded);
}
项目:OpenJSharp    文件:TypeVariableImpl.java   
@Override
public boolean equals(Object o) {
    if (o instanceof TypeVariable &&
            o.getClass() == TypeVariableImpl.class) {
        TypeVariable<?> that = (TypeVariable<?>) o;

        GenericDeclaration thatDecl = that.getGenericDeclaration();
        String thatName = that.getName();

        return Objects.equals(genericDeclaration, thatDecl) &&
            Objects.equals(name, thatName);

    } else
        return false;
}
项目:GitHub    文件:FieldInfo.java   
private static Type getInheritGenericType(Class<?> clazz, Type type, TypeVariable<?> tv) {
    GenericDeclaration gd = tv.getGenericDeclaration();

    Class<?> class_gd = null;
    if (gd instanceof Class) {
        class_gd = (Class<?>) tv.getGenericDeclaration();
    }

    Type[] arguments = null;
    if (class_gd == clazz) {
        if (type instanceof ParameterizedType) {
            ParameterizedType ptype = (ParameterizedType) type;
            arguments = ptype.getActualTypeArguments();
        }
    } else {
        for (Class<?> c = clazz; c != null && c != Object.class && c != class_gd; c = c.getSuperclass()) {
            Type superType = c.getGenericSuperclass();

            if (superType instanceof ParameterizedType) {
                ParameterizedType p_superType = (ParameterizedType) superType;
                Type[] p_superType_args = p_superType.getActualTypeArguments();
                getArgument(p_superType_args, c.getTypeParameters(), arguments);
                arguments = p_superType_args;
            }
        }
    }

    if (arguments == null) {
        return null;
    }

    Type actualType = null;
    TypeVariable<?>[] typeVariables = class_gd.getTypeParameters();
    for (int j = 0; j < typeVariables.length; ++j) {
        if (tv.equals(typeVariables[j])) {
            actualType = arguments[j];
            break;
        }
    }

    return actualType;
}
项目:GitHub    文件:Utils.java   
static Class<?> getRawType(Type type) {
  checkNotNull(type, "type == null");

  if (type instanceof Class<?>) {
    // Type is a normal class.
    return (Class<?>) type;
  }
  if (type instanceof ParameterizedType) {
    ParameterizedType parameterizedType = (ParameterizedType) type;

    // I'm not exactly sure why getRawType() returns Type instead of Class. Neal isn't either but
    // suspects some pathological case related to nested classes exists.
    Type rawType = parameterizedType.getRawType();
    if (!(rawType instanceof Class)) throw new IllegalArgumentException();
    return (Class<?>) rawType;
  }
  if (type instanceof GenericArrayType) {
    Type componentType = ((GenericArrayType) type).getGenericComponentType();
    return Array.newInstance(getRawType(componentType), 0).getClass();
  }
  if (type instanceof TypeVariable) {
    // We could use the variable's bounds, but that won't work if there are multiple. Having a raw
    // type that's more general than necessary is okay.
    return Object.class;
  }
  if (type instanceof WildcardType) {
    return getRawType(((WildcardType) type).getUpperBounds()[0]);
  }

  throw new IllegalArgumentException("Expected a Class, ParameterizedType, or "
        + "GenericArrayType, but <" + type + "> is of type " + type.getClass().getName());
}
项目:jdk8u-jdk    文件:ParameterizedTypeImpl.java   
private void validateConstructorArguments() {
    TypeVariable<?>[] formals = rawType.getTypeParameters();
    // check correct arity of actual type args
    if (formals.length != actualTypeArguments.length){
        throw new MalformedParameterizedTypeException();
    }
    for (int i = 0; i < actualTypeArguments.length; i++) {
        // check actuals against formals' bounds
    }
}
项目:openjdk-jdk10    文件:TypeVariableImpl.java   
@Override
public boolean equals(Object o) {
    if (o instanceof TypeVariable &&
            o.getClass() == TypeVariableImpl.class) {
        TypeVariable<?> that = (TypeVariable<?>) o;

        GenericDeclaration thatDecl = that.getGenericDeclaration();
        String thatName = that.getName();

        return Objects.equals(genericDeclaration, thatDecl) &&
            Objects.equals(name, thatName);

    } else
        return false;
}
项目:GitHub    文件:ParameterizedType.java   
private Class getRawType(Type type) {
    if (type instanceof Class) {
        return (Class)type;
    } else if (type instanceof java.lang.reflect.ParameterizedType) {
        return (Class)(((java.lang.reflect.ParameterizedType)type).getRawType());
    } else if (type instanceof TypeVariable) {
        return Object.class;
    } else if (type instanceof WildcardType) {
        return getRawType(((WildcardType)type).getUpperBounds()[0]);
    } else if (type instanceof GenericArrayType) {
        return Array.newInstance(getRawType(((GenericArrayType)type).getGenericComponentType()), 0).getClass();
    } else {
        throw new RuntimeException("Invalid type passed: " + type);
    }
}
项目:googles-monorepo-demo    文件:TypeTokenTest.java   
public void testGetSubtype_genericSubtypeOfGenericTypeWithFewerParameters() {
  TypeToken<List<String>> supertype = new TypeToken<List<String>>() {};
  TypeToken<MySpecialList<String, ?>> subtype =
      new TypeToken<MySpecialList<String, ?>>() {};
  assertTrue(subtype.isSubtypeOf(supertype));
  ParameterizedType actualSubtype =
      (ParameterizedType) supertype.getSubtype(subtype.getRawType()).getType();
  assertEquals(MySpecialList.class, actualSubtype.getRawType());
  assertThat(actualSubtype.getActualTypeArguments()[0]).isEqualTo(String.class);
  assertThat(actualSubtype.getActualTypeArguments()[1]).isInstanceOf(TypeVariable.class);
  assertTrue(TypeToken.of(actualSubtype).isSubtypeOf(supertype));
}
项目:r8    文件:Minifygeneric.java   
public static void main(String[] args) throws NoSuchMethodException, SecurityException, NoSuchFieldException {
  for (TypeVariable<Class<Generic>> var : Generic.class.getTypeParameters()) {
    System.out.println(var.getName());
    Type bound = var.getBounds()[0];
    System.out.println(((Class<?>) bound).getName().equals(AA.class.getName()));
  }

  Field f = Generic.class.getField("f");
  ParameterizedType fieldType = (java.lang.reflect.ParameterizedType)f.getGenericType();
  checkOneParameterType(fieldType, Generic.class, AA.class);

  ParameterizedType methodReturnType =
      (ParameterizedType) Generic.class.getMethod("get").getGenericReturnType();
  checkOneParameterType(methodReturnType, Generic.class, AA.class);
}
项目:r8    文件:Minifygenericwithinner.java   
private static void checkOneParameterType(ParameterizedType toCheck, Class<?> rawType,
    Class<?>... bounds) {
  System.out.println(((Class<?>) toCheck.getRawType()).getName()
      .equals(rawType.getName()));
  Type[] parameters = toCheck.getActualTypeArguments();
  System.out.println(parameters.length);
  TypeVariable<?> parameter = (TypeVariable<?>) parameters[0];
  System.out.println(parameter.getName());
  Type[] actualBounds = parameter.getBounds();
  for (int i = 0; i < bounds.length; i++) {
    System.out.println(((Class<?>) actualBounds[i]).getName().equals(bounds[i].getName()));
  }
}
项目:OpenJSharp    文件:ParameterizedTypeImpl.java   
private void validateConstructorArguments() {
        TypeVariable/*<?>*/[] formals = rawType.getTypeParameters();
        // check correct arity of actual type args
        if (formals.length != actualTypeArguments.length) {
            throw new MalformedParameterizedTypeException();
        }
/*
        for (int i = 0; i < actualTypeArguments.length; i++) {
            // check actuals against formals' bounds
        }
*/
    }
项目:elasticsearch-jdbc    文件:ArrayDeserializer.java   
@SuppressWarnings({"unchecked", "rawtypes"})
public <T> T deserialize(Object object, Type type) {

    JSONArray jsonArray;
    if (object instanceof JSONArray) {
        jsonArray = (JSONArray) object;
    } else {
        jsonArray = new JSONArray(object);
    }

    Class componentClass = null;
    Type componentType = null;
    if (type instanceof GenericArrayType) {
        componentType = ((GenericArrayType) type).getGenericComponentType();
        if (componentType instanceof TypeVariable) {
            TypeVariable<?> componentVar = (TypeVariable<?>) componentType;
            componentType = componentVar.getBounds()[0];
        }
        if (componentType instanceof Class<?>) {
            componentClass = (Class<?>) componentType;
        }
    } else {
        Class clazz = (Class) type;
        componentType = componentClass = clazz.getComponentType();
    }

    int size = jsonArray.size();
    Object array = Array.newInstance(componentClass, size);

    for (int i = 0; i < size; i++) {
        Object value = jsonArray.get(i);

        Deserializer deserializer = JSONParser.getDeserializer(componentClass);
        Array.set(array, i, deserializer.deserialize(value, componentType));
    }

    return (T) array;
}