本文整理了Java中com.google.common.reflect.TypeToken.getSubtype()
方法的一些代码示例,展示了TypeToken.getSubtype()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。TypeToken.getSubtype()
方法的具体详情如下:
包路径:com.google.common.reflect.TypeToken
类名称: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));
}
内容来源于网络,如有侵权,请联系作者删除!