com.google.common.reflect.TypeToken.getSupertype()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(13.5k)|赞(0)|评价(0)|浏览(171)

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

TypeToken.getSupertype介绍

[英]Returns the generic form of superclass. For example, if this is ArrayList, Iterable is returned given the input Iterable.class.
[中]返回超类的一般形式。例如,如果这是ArrayList,则在给定输入Iterable的情况下返回Iterable。班

代码示例

代码示例来源:origin: google/guava

private TypeToken<? super T> getSupertypeFromUpperBounds(
  Class<? super T> supertype, Type[] upperBounds) {
 for (Type upperBound : upperBounds) {
  @SuppressWarnings("unchecked") // T's upperbound is <? super T>.
  TypeToken<? super T> bound = (TypeToken<? super T>) of(upperBound);
  if (bound.isSubtypeOf(supertype)) {
   @SuppressWarnings({"rawtypes", "unchecked"}) // guarded by the isSubtypeOf check.
   TypeToken<? super T> result = bound.getSupertype((Class) supertype);
   return result;
  }
 }
 throw new IllegalArgumentException(supertype + " isn't a super type of " + this);
}

代码示例来源:origin: google/guava

private TypeToken<? super T> getArraySupertype(Class<? super T> supertype) {
 // with component type, we have lost generic type information
 // Use raw type so that compiler allows us to call getSupertype()
 @SuppressWarnings("rawtypes")
 TypeToken componentType =
   checkNotNull(getComponentType(), "%s isn't a super type of %s", supertype, this);
 // array is covariant. component type is super type, so is the array type.
 @SuppressWarnings("unchecked") // going from raw type back to generics
 TypeToken<?> componentSupertype = componentType.getSupertype(supertype.getComponentType());
 @SuppressWarnings("unchecked") // component type is super type, so is array type.
 TypeToken<? super T> result =
   (TypeToken<? super T>)
     // If we are passed with int[].class, don't turn it to GenericArrayType
     of(newArrayClassOrGenericArrayType(componentSupertype.runtimeType));
 return result;
}

代码示例来源:origin: google/j2objc

private TypeToken<? super T> getSupertypeFromUpperBounds(
  Class<? super T> supertype, Type[] upperBounds) {
 for (Type upperBound : upperBounds) {
  @SuppressWarnings("unchecked") // T's upperbound is <? super T>.
  TypeToken<? super T> bound = (TypeToken<? super T>) of(upperBound);
  if (bound.isSubtypeOf(supertype)) {
   @SuppressWarnings({"rawtypes", "unchecked"}) // guarded by the isSubtypeOf check.
   TypeToken<? super T> result = bound.getSupertype((Class) supertype);
   return result;
  }
 }
 throw new IllegalArgumentException(supertype + " isn't a super type of " + this);
}

代码示例来源:origin: google/j2objc

private TypeToken<? super T> getArraySupertype(Class<? super T> supertype) {
 // with component type, we have lost generic type information
 // Use raw type so that compiler allows us to call getSupertype()
 @SuppressWarnings("rawtypes")
 TypeToken componentType =
   checkNotNull(getComponentType(), "%s isn't a super type of %s", supertype, this);
 // array is covariant. component type is super type, so is the array type.
 @SuppressWarnings("unchecked") // going from raw type back to generics
 TypeToken<?> componentSupertype = componentType.getSupertype(supertype.getComponentType());
 @SuppressWarnings("unchecked") // component type is super type, so is array type.
 TypeToken<? super T> result =
   (TypeToken<? super T>)
     // If we are passed with int[].class, don't turn it to GenericArrayType
     of(newArrayClassOrGenericArrayType(componentSupertype.runtimeType));
 return result;
}

代码示例来源:origin: wildfly/wildfly

private TypeToken<? super T> getSupertypeFromUpperBounds(
  Class<? super T> supertype, Type[] upperBounds) {
 for (Type upperBound : upperBounds) {
  @SuppressWarnings("unchecked") // T's upperbound is <? super T>.
  TypeToken<? super T> bound = (TypeToken<? super T>) of(upperBound);
  if (bound.isSubtypeOf(supertype)) {
   @SuppressWarnings({"rawtypes", "unchecked"}) // guarded by the isSubtypeOf check.
   TypeToken<? super T> result = bound.getSupertype((Class) supertype);
   return result;
  }
 }
 throw new IllegalArgumentException(supertype + " isn't a super type of " + this);
}

代码示例来源:origin: google/guava

@SuppressWarnings({"rawtypes", "unchecked"})
private static Type getSupertype(Type type, Class<?> superclass) {
 Class rawType = superclass;
 return TypeToken.of(type).getSupertype(rawType).getType();
}

代码示例来源:origin: google/guava

private Type resolveTypeArgsForSubclass(Class<?> subclass) {
 // If both runtimeType and subclass are not parameterized, return subclass
 // If runtimeType is not parameterized but subclass is, process subclass as a parameterized type
 // If runtimeType is a raw type (i.e. is a parameterized type specified as a Class<?>), we
 // return subclass as a raw type
 if (runtimeType instanceof Class
   && ((subclass.getTypeParameters().length == 0)
     || (getRawType().getTypeParameters().length != 0))) {
  // no resolution needed
  return subclass;
 }
 // class Base<A, B> {}
 // class Sub<X, Y> extends Base<X, Y> {}
 // Base<String, Integer>.subtype(Sub.class):
 // Sub<X, Y>.getSupertype(Base.class) => Base<X, Y>
 // => X=String, Y=Integer
 // => Sub<X, Y>=Sub<String, Integer>
 TypeToken<?> genericSubtype = toGenericType(subclass);
 @SuppressWarnings({"rawtypes", "unchecked"}) // subclass isn't <? extends T>
 Type supertypeWithArgsFromSubtype =
   genericSubtype.getSupertype((Class) getRawType()).runtimeType;
 return new TypeResolver()
   .where(supertypeWithArgsFromSubtype, runtimeType)
   .resolveType(genericSubtype.runtimeType);
}

代码示例来源:origin: wildfly/wildfly

private TypeToken<? super T> getArraySupertype(Class<? super T> supertype) {
 // with component type, we have lost generic type information
 // Use raw type so that compiler allows us to call getSupertype()
 @SuppressWarnings("rawtypes")
 TypeToken componentType =
   checkNotNull(getComponentType(), "%s isn't a super type of %s", supertype, this);
 // array is covariant. component type is super type, so is the array type.
 @SuppressWarnings("unchecked") // going from raw type back to generics
 TypeToken<?> componentSupertype = componentType.getSupertype(supertype.getComponentType());
 @SuppressWarnings("unchecked") // component type is super type, so is array type.
 TypeToken<? super T> result =
   (TypeToken<? super T>)
     // If we are passed with int[].class, don't turn it to GenericArrayType
     of(newArrayClassOrGenericArrayType(componentSupertype.runtimeType));
 return result;
}

代码示例来源:origin: google/guava

public void testGetSupertype_withArray() {
 assertEquals(
   new TypeToken<Iterable<List<String>>[]>() {},
   TypeToken.of(StringListIterable[].class).getSupertype(Iterable[].class));
 assertEquals(int[].class, TypeToken.of(int[].class).getSupertype(int[].class).getType());
 assertEquals(Object.class, TypeToken.of(int[].class).getSupertype(Object.class).getType());
 assertEquals(int[][].class, TypeToken.of(int[][].class).getSupertype(int[][].class).getType());
 assertEquals(
   Object[].class, TypeToken.of(String[].class).getSupertype(Object[].class).getType());
 assertEquals(Object.class, TypeToken.of(String[].class).getSupertype(Object.class).getType());
}

代码示例来源:origin: google/guava

public <T extends Iterable<String>> void testGetSupertype_fromTypeVariable() {
 @SuppressWarnings("unchecked") // to construct TypeToken<T> from TypeToken.of()
 TypeToken<T> typeVariableToken = (TypeToken<T>) TypeToken.of(new TypeCapture<T>() {}.capture());
 assertEquals(
   new TypeToken<Iterable<String>>() {}, typeVariableToken.getSupertype(Iterable.class));
}

代码示例来源:origin: google/j2objc

private Type resolveTypeArgsForSubclass(Class<?> subclass) {
 // If both runtimeType and subclass are not parameterized, return subclass
 // If runtimeType is not parameterized but subclass is, process subclass as a parameterized type
 // If runtimeType is a raw type (i.e. is a parameterized type specified as a Class<?>), we
 // return subclass as a raw type
 if (runtimeType instanceof Class
   && ((subclass.getTypeParameters().length == 0)
     || (getRawType().getTypeParameters().length != 0))) {
  // no resolution needed
  return subclass;
 }
 // class Base<A, B> {}
 // class Sub<X, Y> extends Base<X, Y> {}
 // Base<String, Integer>.subtype(Sub.class):
 // Sub<X, Y>.getSupertype(Base.class) => Base<X, Y>
 // => X=String, Y=Integer
 // => Sub<X, Y>=Sub<String, Integer>
 TypeToken<?> genericSubtype = toGenericType(subclass);
 @SuppressWarnings({"rawtypes", "unchecked"}) // subclass isn't <? extends T>
 Type supertypeWithArgsFromSubtype =
   genericSubtype.getSupertype((Class) getRawType()).runtimeType;
 return new TypeResolver()
   .where(supertypeWithArgsFromSubtype, runtimeType)
   .resolveType(genericSubtype.runtimeType);
}

代码示例来源:origin: google/guava

public void testGetSupertype_chained() {
 @SuppressWarnings("unchecked") // StringListIterable extensd ListIterable<String>
 TypeToken<ListIterable<String>> listIterableType =
   (TypeToken<ListIterable<String>>)
     TypeToken.of(StringListIterable.class).getSupertype(ListIterable.class);
 ParameterizedType expectedType =
   Types.newParameterizedType(
     Iterable.class, Types.newParameterizedType(List.class, String.class));
 assertEquals(expectedType, listIterableType.getSupertype(Iterable.class).getType());
}

代码示例来源:origin: google/guava

public void testGetSupertype_fullyGenericType() {
 ParameterizedType expectedType =
   Types.newParameterizedType(
     Map.class,
     ListMap.class.getTypeParameters()[0],
     Types.newParameterizedType(List.class, ListMap.class.getTypeParameters()[1]));
 assertEquals(expectedType, TypeToken.of(ListMap.class).getSupertype(Map.class).getType());
}

代码示例来源:origin: google/guava

public void testGetSupertype_fromWildcard() {
 @SuppressWarnings("unchecked") // can't do new TypeToken<? extends ...>() {}
 TypeToken<? extends List<String>> type =
   (TypeToken<? extends List<String>>)
     TypeToken.of(Types.subtypeOf(new TypeToken<List<String>>() {}.getType()));
 assertEquals(new TypeToken<Iterable<String>>() {}, type.getSupertype(Iterable.class));
}

代码示例来源:origin: wildfly/wildfly

private Type resolveTypeArgsForSubclass(Class<?> subclass) {
 // If both runtimeType and subclass are not parameterized, return subclass
 // If runtimeType is not parameterized but subclass is, process subclass as a parameterized type
 // If runtimeType is a raw type (i.e. is a parameterized type specified as a Class<?>), we
 // return subclass as a raw type
 if (runtimeType instanceof Class
   && ((subclass.getTypeParameters().length == 0)
     || (getRawType().getTypeParameters().length != 0))) {
  // no resolution needed
  return subclass;
 }
 // class Base<A, B> {}
 // class Sub<X, Y> extends Base<X, Y> {}
 // Base<String, Integer>.subtype(Sub.class):
 // Sub<X, Y>.getSupertype(Base.class) => Base<X, Y>
 // => X=String, Y=Integer
 // => Sub<X, Y>=Sub<String, Integer>
 TypeToken<?> genericSubtype = toGenericType(subclass);
 @SuppressWarnings({"rawtypes", "unchecked"}) // subclass isn't <? extends T>
 Type supertypeWithArgsFromSubtype =
   genericSubtype.getSupertype((Class) getRawType()).runtimeType;
 return new TypeResolver()
   .where(supertypeWithArgsFromSubtype, runtimeType)
   .resolveType(genericSubtype.runtimeType);
}

代码示例来源:origin: google/guava

public void testGetSupertype_withTypeVariable() {
 ParameterizedType expectedType =
   Types.newParameterizedType(
     Iterable.class,
     Types.newParameterizedType(List.class, ListIterable.class.getTypeParameters()[0]));
 assertEquals(
   expectedType, TypeToken.of(ListIterable.class).getSupertype(Iterable.class).getType());
}

代码示例来源:origin: google/guava

public void testGetSupertype_withoutTypeVariable() {
 ParameterizedType expectedType =
   Types.newParameterizedType(
     Iterable.class, Types.newParameterizedType(List.class, String.class));
 assertEquals(
   expectedType,
   TypeToken.of(StringListIterable.class).getSupertype(Iterable.class).getType());
}

代码示例来源:origin: co.cask.cdap/cdap-app-fabric

/**
 * Returns a resolved {@link TypeToken} of the given super type of the class.
 *
 * @param userClass the user class of which we want the TypeToken
 * @param superType Super type of the class
 * @param <V> Type of the super type
 * @return A resolved {@link TypeToken}
 */
@SuppressWarnings("unchecked")
private static <V> TypeToken<V> resolveClass(Class<? extends V> userClass, Class<V> superType) {
 return (TypeToken<V>) TypeToken.of(userClass).getSupertype(superType);
}

代码示例来源:origin: com.google.caliper/caliper

private static <K, V> TypeToken<Map<K, List<V>>> getMapOfListsToken(
  TypeToken<ListMultimap<K, V>> from) {
 ParameterizedType rawType = (ParameterizedType) from.getSupertype(ListMultimap.class).getType();
 @SuppressWarnings("unchecked") // key type is K
 TypeToken<K> keyType = (TypeToken<K>) TypeToken.of(rawType.getActualTypeArguments()[0]);
 @SuppressWarnings("unchecked") // value type is V
 TypeToken<V> valueType = (TypeToken<V>) TypeToken.of(rawType.getActualTypeArguments()[1]);
 return new TypeToken<Map<K, List<V>>>() {}
   .where(new TypeParameter<K>() {}, keyType)
   .where(new TypeParameter<V>() {}, valueType);
}

代码示例来源:origin: net.trajano.caliper/caliper

@SuppressWarnings("serial")
private static <K, V> TypeToken<Map<K, List<V>>> getMapOfListsToken(
  TypeToken<ListMultimap<K, V>> from) {
 ParameterizedType rawType = (ParameterizedType) from.getSupertype(ListMultimap.class).getType();
 @SuppressWarnings("unchecked") // key type is K
 TypeToken<K> keyType = (TypeToken<K>) TypeToken.of(rawType.getActualTypeArguments()[0]);
 @SuppressWarnings("unchecked") // value type is V
 TypeToken<V> valueType = (TypeToken<V>) TypeToken.of(rawType.getActualTypeArguments()[1]);
 return new TypeToken<Map<K, List<V>>>() {}
   .where(new TypeParameter<K>() {}, keyType)
   .where(new TypeParameter<V>() {}, valueType);
}

相关文章

微信公众号

最新文章

更多

TypeToken类方法