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

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

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

TypeToken.canonicalizeTypeArg介绍

[英]In reflection, Foo.getUpperBounds()[0] is always Object.class, even when Foo is defined as Foo. Thus directly calling .is(String.class)will return false. To mitigate, we canonicalize wildcards by enforcing the following invariants:

  1. canonicalize(t) always produces the equal result for equivalent types. For example both Enum and Enum> canonicalize to Enum.
  2. canonicalize(t) produces a "literal" supertype of t. For example: Enum> canonicalizes to Enum, which is a supertype (if we disregard the upper bound is implicitly an Enum too).
  3. If canonicalize(A) == canonicalize(B), then Foo.isSubtypeOf(Foo) and vice versa. i.e. A.is(B) and B.is(A).
  4. canonicalize(canonicalize(A)) == canonicalize(A).
    [中]仔细想想,福。getUpperBounds()[0]始终是对象。类,即使Foo被定义为Foo。因此直接呼叫。is(String.class)将返回false。为了缓解这种情况,我们通过强制执行以下不变量来规范化通配符:
    1.规范化(t)总是为等价类型生成相同的结果。例如,Enum和Enum>都将规范化为Enum。
    1.规范化(t)生成t的“字面”超类型。例如:Enum>规范化为Enum,这是一个超类型(如果我们忽略上限,它也隐式地是一个Enum)。
    1.如果规范化(A)=规范化(B),那么Foo{.isSubtypeOf(Foo) and vice versa. i.e. A.is(B) and B.is(A).
  5. canonicalize(canonicalize(A)) == canonicalize(A).

代码示例

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

private static ParameterizedType canonicalizeWildcardsInParameterizedType(
  ParameterizedType type) {
 Class<?> rawType = (Class<?>) type.getRawType();
 TypeVariable<?>[] typeVars = rawType.getTypeParameters();
 Type[] typeArgs = type.getActualTypeArguments();
 for (int i = 0; i < typeArgs.length; i++) {
  typeArgs[i] = canonicalizeTypeArg(typeVars[i], typeArgs[i]);
 }
 return Types.newParameterizedTypeWithOwner(type.getOwnerType(), rawType, typeArgs);
}

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

private static ParameterizedType canonicalizeWildcardsInParameterizedType(
  ParameterizedType type) {
 Class<?> rawType = (Class<?>) type.getRawType();
 TypeVariable<?>[] typeVars = rawType.getTypeParameters();
 Type[] typeArgs = type.getActualTypeArguments();
 for (int i = 0; i < typeArgs.length; i++) {
  typeArgs[i] = canonicalizeTypeArg(typeVars[i], typeArgs[i]);
 }
 return Types.newParameterizedTypeWithOwner(type.getOwnerType(), rawType, typeArgs);
}

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

private static ParameterizedType canonicalizeWildcardsInParameterizedType(
  ParameterizedType type) {
 Class<?> rawType = (Class<?>) type.getRawType();
 TypeVariable<?>[] typeVars = rawType.getTypeParameters();
 Type[] typeArgs = type.getActualTypeArguments();
 for (int i = 0; i < typeArgs.length; i++) {
  typeArgs[i] = canonicalizeTypeArg(typeVars[i], typeArgs[i]);
 }
 return Types.newParameterizedTypeWithOwner(type.getOwnerType(), rawType, typeArgs);
}

代码示例来源:origin: org.kill-bill.billing/killbill-platform-osgi-bundles-logger

private static ParameterizedType canonicalizeWildcardsInParameterizedType(
  ParameterizedType type) {
 Class<?> rawType = (Class<?>) type.getRawType();
 TypeVariable<?>[] typeVars = rawType.getTypeParameters();
 Type[] typeArgs = type.getActualTypeArguments();
 for (int i = 0; i < typeArgs.length; i++) {
  typeArgs[i] = canonicalizeTypeArg(typeVars[i], typeArgs[i]);
 }
 return Types.newParameterizedTypeWithOwner(type.getOwnerType(), rawType, typeArgs);
}

代码示例来源:origin: org.jboss.eap/wildfly-client-all

private static ParameterizedType canonicalizeWildcardsInParameterizedType(
  ParameterizedType type) {
 Class<?> rawType = (Class<?>) type.getRawType();
 TypeVariable<?>[] typeVars = rawType.getTypeParameters();
 Type[] typeArgs = type.getActualTypeArguments();
 for (int i = 0; i < typeArgs.length; i++) {
  typeArgs[i] = canonicalizeTypeArg(typeVars[i], typeArgs[i]);
 }
 return Types.newParameterizedTypeWithOwner(type.getOwnerType(), rawType, typeArgs);
}

相关文章

微信公众号

最新文章

更多

TypeToken类方法