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

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

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

TypeToken.getSubtype介绍

[英]Returns subtype of this with subclass as the raw class. For example, if this is Iterable and subclass is List, List is returned.
[中]返回此的子类型,子类作为原始类。例如,如果这是Iterable,子类是List,则返回List。

代码示例

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

private TypeToken<? extends T> getSubtypeFromLowerBounds(Class<?> subclass, Type[] lowerBounds) {
 for (Type lowerBound : lowerBounds) {
  @SuppressWarnings("unchecked") // T's lower bound is <? extends T>
  TypeToken<? extends T> bound = (TypeToken<? extends T>) of(lowerBound);
  // Java supports only one lowerbound anyway.
  return bound.getSubtype(subclass);
 }
 throw new IllegalArgumentException(subclass + " isn't a subclass of " + this);
}

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

private TypeToken<? extends T> getArraySubtype(Class<?> subclass) {
 // array is covariant. component type is subtype, so is the array type.
 TypeToken<?> componentSubtype = getComponentType().getSubtype(subclass.getComponentType());
 @SuppressWarnings("unchecked") // component type is subtype, so is array type.
 TypeToken<? extends T> result =
   (TypeToken<? extends T>)
     // If we are passed with int[].class, don't turn it to GenericArrayType
     of(newArrayClassOrGenericArrayType(componentSubtype.runtimeType));
 return result;
}

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

public void testGetSubtypeOf_impossibleWildcard() {
 TypeToken<List<? extends Number>> numberList = new TypeToken<List<? extends Number>>() {};
 abstract class StringList implements List<String> {}
 try {
  numberList.getSubtype(StringList.class);
  fail();
 } catch (IllegalArgumentException expected) {}
}

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

public void testGetSubtype_withArray() {
 assertEquals(
   TypeToken.of(StringListIterable[].class),
   TypeToken.of(Iterable[].class).getSubtype(StringListIterable[].class));
 assertEquals(
   TypeToken.of(String[].class), TypeToken.of(Object[].class).getSubtype(String[].class));
 assertEquals(TypeToken.of(int[].class), TypeToken.of(Object.class).getSubtype(int[].class));
}

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

public void testGetSubtype_outerTypeVarTranslatesInnerTypeVar() {
 class TwoTypeArgs<K, V> {}
 class StringForFirstTypeArg<V> extends TwoTypeArgs<String, V> {}
 class OuterTypeVar<V> extends StringForFirstTypeArg<List<V>> {}
 TypeToken<StringForFirstTypeArg<List<?>>> type =
   new TypeToken<StringForFirstTypeArg<List<?>>>() {};
 assertEquals(new TypeToken<OuterTypeVar<?>>() {}, type.getSubtype(OuterTypeVar.class));
}

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

private static Type getSubtype(Type type, Class<?> subclass) {
  return TypeToken.of(type).getSubtype(subclass).getType();
 }
}

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

public void testGetSubtype_toWildcardWithBounds() {
 class TwoTypeArgs<K, V> {}
 class StringForFirstTypeArg<V> extends TwoTypeArgs<String, V> {}
 TypeToken<TwoTypeArgs<?, ? extends Number>> supertype =
   new TypeToken<TwoTypeArgs<?, ? extends Number>>() {};
 TypeToken<StringForFirstTypeArg<Integer>> subtype =
   new TypeToken<StringForFirstTypeArg<Integer>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 // TODO(benyu): This should check equality to an expected value, see discussion in cl/98674873
 TypeToken<?> unused = supertype.getSubtype(subtype.getRawType());
}

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

public <T extends Iterable<String>> void testGetSubtype_fromTypeVariable() {
 try {
  TypeToken.of(new TypeCapture<T>() {}.capture()).getSubtype(List.class);
  fail();
 } catch (IllegalArgumentException expected) {
 }
}

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

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

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

public void testGetSubtype_fromWildcard_upperBounded() {
 @SuppressWarnings("unchecked") // can't do new TypeToken<? extends ...>() {}
 TypeToken<? extends Iterable<String>> type =
   (TypeToken<? extends Iterable<String>>)
     TypeToken.of(Types.subtypeOf(new TypeToken<Iterable<String>>() {}.getType()));
 try {
  type.getSubtype(Iterable.class);
  fail();
 } catch (IllegalArgumentException expected) {
 }
}

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

public void testGetSubtype_toWildcard() {
 class TwoTypeArgs<K, V> {}
 class StringForFirstTypeArg<V> extends TwoTypeArgs<String, V> {}
 TypeToken<TwoTypeArgs<?, ?>> supertype = new TypeToken<TwoTypeArgs<?, ?>>() {};
 TypeToken<StringForFirstTypeArg<String>> subtype =
   new TypeToken<StringForFirstTypeArg<String>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 assertEquals(
   new TypeToken<StringForFirstTypeArg<?>>() {}, supertype.getSubtype(subtype.getRawType()));
}

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

public void testGetSubtype_innerTypeOfGenericClassTranslatesOwnerTypeVars() {
 TypeToken<TwoTypeArgs<?, ?>.InnerType<?, ?>> supertype =
   new TypeToken<TwoTypeArgs<?, ?>.InnerType<?, ?>>() {};
 TypeToken<StringForFirstTypeArg<Integer>.StringInnerType<Long>> subtype =
   new TypeToken<StringForFirstTypeArg<Integer>.StringInnerType<Long>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 ParameterizedType actualSubtype =
   (ParameterizedType) supertype.getSubtype(subtype.getRawType()).getType();
 assertEquals(StringForFirstTypeArg.StringInnerType.class, actualSubtype.getRawType());
 assertThat(actualSubtype.getActualTypeArguments()[0]).isInstanceOf(WildcardType.class);
 ParameterizedType actualOwnerType = (ParameterizedType) actualSubtype.getOwnerType();
 assertEquals(StringForFirstTypeArg.class, actualOwnerType.getRawType());
}

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

public void testGetSubtype_fromWildcard_lowerBoundNotSupertype() {
 @SuppressWarnings("unchecked") // can't do new TypeToken<? extends ...>() {}
 TypeToken<? super Iterable<String>> type =
   (TypeToken<? super Iterable<String>>)
     TypeToken.of(Types.supertypeOf(new TypeToken<ImmutableList<String>>() {}.getType()));
 try {
  type.getSubtype(List.class);
  fail();
 } catch (IllegalArgumentException expected) {
 }
}

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

public <T> void testGetSubtype_manyGenericArgs() {
 class FourTypeArgs<T1, T2, T3, T4> {}
 class ThreeTypeArgs<T1, T2, T3> extends FourTypeArgs<T1, T2, T3, String> {}
 TypeToken<FourTypeArgs<T, Integer, ?, ?>> supertype =
   new TypeToken<FourTypeArgs<T, Integer, ?, ?>>() {};
 TypeToken<ThreeTypeArgs<T, Integer, String>> subtype =
   new TypeToken<ThreeTypeArgs<T, Integer, String>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 assertEquals(
   new TypeToken<ThreeTypeArgs<T, Integer, ?>>() {},
   supertype.getSubtype(subtype.getRawType()));
}

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

public void testGetSubtype_baseClassWithLessTypeArgs() {
 class SingleGenericExtendsBase<T> extends Base {}
 class DoubleGenericExtendsSingleGeneric<T1, TUnused> extends SingleGenericExtendsBase<T1> {}
 TypeToken<SingleGenericExtendsBase<?>> supertype =
   new TypeToken<SingleGenericExtendsBase<?>>() {};
 TypeToken<DoubleGenericExtendsSingleGeneric<String, Integer>> subtype =
   new TypeToken<DoubleGenericExtendsSingleGeneric<String, Integer>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 ParameterizedType actualSubtype =
   (ParameterizedType) supertype.getSubtype(subtype.getRawType()).getType();
 assertEquals(DoubleGenericExtendsSingleGeneric.class, actualSubtype.getRawType());
 assertThat(actualSubtype.getActualTypeArguments()[0]).isInstanceOf(WildcardType.class);
}

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

public void testGetSubtype_baseClassWithNoTypeArgs() {
 class SingleGenericExtendsBase<T> extends Base {}
 TypeToken<Base> supertype = new TypeToken<Base>() {};
 TypeToken<SingleGenericExtendsBase<String>> subtype =
   new TypeToken<SingleGenericExtendsBase<String>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 ParameterizedType actualSubtype =
   (ParameterizedType) supertype.getSubtype(subtype.getRawType()).getType();
 assertEquals(SingleGenericExtendsBase.class, actualSubtype.getRawType());
}

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

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));
}

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

public void testGetSubtype_genericSubtypeOfNonGenericType() {
 TypeToken<Serializable> supertype = new TypeToken<Serializable>() {};
 TypeToken<ArrayList<String>> subtype = new TypeToken<ArrayList<String>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 ParameterizedType actualSubtype =
   (ParameterizedType) supertype.getSubtype(subtype.getRawType()).getType();
 assertEquals(ArrayList.class, actualSubtype.getRawType());
 assertThat(actualSubtype.getActualTypeArguments()[0]).isInstanceOf(TypeVariable.class);
 assertTrue(TypeToken.of(actualSubtype).isSubtypeOf(supertype));
}

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

public void testGetSubtype_baseClassInGenericClassWithNoTypeArgs() {
 class SingleGenericExtendsBase<T> implements GenericClass.Base {}
 TypeToken<GenericClass.Base> supertype = new TypeToken<GenericClass.Base>() {};
 TypeToken<SingleGenericExtendsBase<String>> subtype =
   new TypeToken<SingleGenericExtendsBase<String>>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 ParameterizedType actualSubtype =
   (ParameterizedType) supertype.getSubtype(subtype.getRawType()).getType();
 assertEquals(SingleGenericExtendsBase.class, actualSubtype.getRawType());
 assertTrue(TypeToken.of(actualSubtype).isSubtypeOf(supertype));
}

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

public void testGetSubtype_genericSubtypeOfRawTypeWithFewerTypeParameters() {
 TypeToken<List> supertype = new TypeToken<List>() {};
 TypeToken<MySpecialList> subtype = new TypeToken<MySpecialList>() {};
 assertTrue(subtype.isSubtypeOf(supertype));
 Class<?> actualSubtype = (Class<?>) supertype.getSubtype(subtype.getRawType()).getType();
 assertEquals(MySpecialList.class, actualSubtype);
 assertTrue(TypeToken.of(actualSubtype).isSubtypeOf(supertype));
}

相关文章

微信公众号

最新文章

更多

TypeToken类方法