亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? typetoken.java

?? 地圖生成的一個文件
?? JAVA
字號:
/* * Copyright (C) 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.google.gson.reflect;import java.lang.reflect.Array;import java.lang.reflect.GenericArrayType;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.lang.reflect.TypeVariable;import java.util.HashMap;import java.util.Map;/** * Represents a generic type {@code T}. * * You can use this class to get the generic type for a class. For example, * to get the generic type for <code>Collection&lt;Foo&gt;</code>, you can use: * <p> * <code>Type typeOfCollectionOfFoo = new TypeToken&lt;Collection&lt;Foo&gt;&gt;(){}.getType() * </code> *  * <p>Assumes {@code Type} implements {@code equals()} and {@code hashCode()} * as a value (as opposed to identity) comparison. * * Also implements {@link #isAssignableFrom(Type)} to check type-safe * assignability. * * @author Bob Lee * @author Sven Mawson */public abstract class TypeToken<T> {  final Class<? super T> rawType;  final Type type;  /**   * Constructs a new type token. 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.   *   * <p>For example:   * <code>   * {@literal TypeToken<List<String>> t = new TypeToken<List<String>>}(){}   * </code>   */  @SuppressWarnings("unchecked")  protected TypeToken() {    this.type = getSuperclassTypeParameter(getClass());    this.rawType = (Class<? super T>) getRawType(type);  }  /**   * Unsafe. Constructs a type token manually.   */  @SuppressWarnings({"unchecked"})  private TypeToken(Type type) {    this.rawType = (Class<? super T>) getRawType(nonNull(type, "type"));    this.type = type;  }  private static <T> T nonNull(T o, String message) {    if (o == null) {      throw new NullPointerException(message);    }    return o;  }    /**   * Gets type from super class's type parameter.   */  static Type getSuperclassTypeParameter(Class<?> subclass) {    Type superclass = subclass.getGenericSuperclass();    if (superclass instanceof Class) {      throw new RuntimeException("Missing type parameter.");    }    return ((ParameterizedType) superclass).getActualTypeArguments()[0];  }  /**   * Gets type token from super class's type parameter.   */  static TypeToken<?> fromSuperclassTypeParameter(Class<?> subclass) {    return new SimpleTypeToken<Object>(subclass);  }  private 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();      if (rawType instanceof Class<?>) {        return (Class<?>) rawType;      }      throw buildUnexpectedTypeError(rawType, Class.class);    } else if (type instanceof GenericArrayType) {      GenericArrayType genericArrayType = (GenericArrayType) type;      // TODO(jleitch): This is not the most efficient way to handle generic      // arrays, but is there another way to extract the array class in a      // non-hacky way (i.e. using String value class names- "[L...")?      Object rawArrayType = Array.newInstance(          getRawType(genericArrayType.getGenericComponentType()), 0);      return rawArrayType.getClass();    } else {      throw buildUnexpectedTypeError(          type, ParameterizedType.class, GenericArrayType.class);    }  }  /**   * Gets the raw type.   */  public Class<? super T> getRawType() {    return rawType;  }  /**   * Gets underlying {@code Type} instance.   */  public Type getType() {    return type;  }  /**   * Check if this type is assignable from the given class object.   */  public boolean isAssignableFrom(Class<?> cls) {    return isAssignableFrom((Type) cls);  }  /**   * Check if this type is assignable from the given Type.   */  public boolean isAssignableFrom(Type from) {    if (from == null) {      return false;    }    if (type.equals(from)) {      return true;    }    if (type instanceof Class) {      return rawType.isAssignableFrom(getRawType(from));    } else if (type instanceof ParameterizedType) {      return isAssignableFrom(from, (ParameterizedType) type,          new HashMap<String, Type>());    } else if (type instanceof GenericArrayType) {      return rawType.isAssignableFrom(getRawType(from))          && isAssignableFrom(from, (GenericArrayType) type);    } else {      throw buildUnexpectedTypeError(          type, Class.class, ParameterizedType.class, GenericArrayType.class);    }  }  /**   * Check if this type is assignable from the given type token.   */  public boolean isAssignableFrom(TypeToken<?> token) {    return isAssignableFrom(token.getType());  }  /**   * Private helper function that performs some assignability checks for   * the provided GenericArrayType.   */  private static boolean isAssignableFrom(Type from, GenericArrayType to) {    Type toGenericComponentType = to.getGenericComponentType();    if (toGenericComponentType instanceof ParameterizedType) {      Type t = from;      if (from instanceof GenericArrayType) {        t = ((GenericArrayType) from).getGenericComponentType();      } else if (from instanceof Class) {        Class<?> classType = (Class<?>) from;        while (classType.isArray()) {          classType = classType.getComponentType();        }        t = classType;      }      return isAssignableFrom(t, (ParameterizedType) toGenericComponentType,          new HashMap<String, Type>());    }    // No generic defined on "to"; therefore, return true and let other    // checks determine assignability    return true;  }  /**   * Private recursive helper function to actually do the type-safe checking   * of assignability.   */  private static boolean isAssignableFrom(Type from, ParameterizedType to,      Map<String, Type> typeVarMap) {    if (from == null) {      return false;    }    if (to.equals(from)) {      return true;    }    // First figure out the class and any type information.    Class<?> clazz = getRawType(from);    ParameterizedType ptype = null;    if (from instanceof ParameterizedType) {      ptype = (ParameterizedType) from;    }    // Load up parameterized variable info if it was parameterized.    if (ptype != null) {      Type[] tArgs = ptype.getActualTypeArguments();      TypeVariable<?>[] tParams = clazz.getTypeParameters();      for (int i = 0; i < tArgs.length; i++) {        Type arg = tArgs[i];        TypeVariable<?> var = tParams[i];        while (arg instanceof TypeVariable) {          TypeVariable<?> v = (TypeVariable<?>) arg;          arg = typeVarMap.get(v.getName());        }        typeVarMap.put(var.getName(), arg);      }      // check if they are equivalent under our current mapping.      if (typeEquals(ptype, to, typeVarMap)) {        return true;      }    }    for (Type itype : clazz.getGenericInterfaces()) {      if (isAssignableFrom(itype, to, new HashMap<String, Type>(typeVarMap))) {        return true;      }    }    // Interfaces didn't work, try the superclass.    Type sType = clazz.getGenericSuperclass();    if (isAssignableFrom(sType, to, new HashMap<String, Type>(typeVarMap))) {      return true;    }    return false;  }  /**   * Checks if two parameterized types are exactly equal, under the variable   * replacement described in the typeVarMap.   */  private static boolean typeEquals(ParameterizedType from,      ParameterizedType to, Map<String, Type> typeVarMap) {    if (from.getRawType().equals(to.getRawType())) {      Type[] fromArgs = from.getActualTypeArguments();      Type[] toArgs = to.getActualTypeArguments();      for (int i = 0; i < fromArgs.length; i++) {        if (!matches(fromArgs[i], toArgs[i], typeVarMap)) {          return false;        }      }      return true;    }    return false;  }  /**   * Checks if two types are the same or are equivalent under a variable mapping   * given in the type map that was provided.   */  private static boolean matches(Type from, Type to,      Map<String, Type> typeMap) {    if (to.equals(from)) return true;    if (from instanceof TypeVariable) {      return to.equals(typeMap.get(((TypeVariable<?>)from).getName()));    }    return false;  }  /**   * Hashcode for this object.   * @return hashcode for this object.   */  @Override public int hashCode() {    return type.hashCode();  }  /**   * Method to test equality.    *    * @return true if this object is logically equal to the specified object, false otherwise.   */  @Override public boolean equals(Object o) {    if (o == this) {      return true;    }    if (!(o instanceof TypeToken<?>)) {      return false;    }    TypeToken<?> t = (TypeToken<?>) o;    return type.equals(t.type);  }  /**   * Returns a string representation of this object.   * @return a string representation of this object.   */  @Override public String toString() {    return type instanceof Class<?>        ? ((Class<?>) type).getName()        : type.toString();  }  private static AssertionError buildUnexpectedTypeError(      Type token, Class<?>... expected) {    // Build exception message    StringBuilder exceptionMessage =        new StringBuilder("Unexpected type. Expected one of: ");    for (Class<?> clazz : expected) {      exceptionMessage.append(clazz.getName()).append(", ");    }    exceptionMessage.append("but got: ").append(token.getClass().getName())        .append(", for type token: ").append(token.toString()).append('.');    return new AssertionError(exceptionMessage.toString());  }  /**   * Gets type token for the given {@code Type} instance.   */  public static TypeToken<?> get(Type type) {    return new SimpleTypeToken<Object>(type);  }  /**   * Gets type token for the given {@code Class} instance.   */  public static <T> TypeToken<T> get(Class<T> type) {    return new SimpleTypeToken<T>(type);  }  /**   * Private static class to not create more anonymous classes than   * necessary.   */  private static class SimpleTypeToken<T> extends TypeToken<T> {    public SimpleTypeToken(Type type) {      super(type);    }  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级一级性生活免费录像| 国产精品乱人伦中文| www日韩大片| 亚洲永久免费av| 国产成人午夜精品5599 | 欧美日韩一区二区三区免费看 | 色狠狠av一区二区三区| 欧美成人一级视频| 亚洲一区视频在线| 99久久99久久久精品齐齐| 欧美大胆一级视频| 亚洲成av人片在www色猫咪| www.日韩精品| 国产偷v国产偷v亚洲高清 | 亚洲视频你懂的| 国产成a人无v码亚洲福利| 日韩一区二区三区免费看| 亚洲在线观看免费视频| 波多野结衣91| 国产精品久久久久婷婷二区次| 老司机一区二区| 9191久久久久久久久久久| 一区二区在线看| 色综合一区二区| 国产精品高潮久久久久无| 国产精品综合二区| 久久久影视传媒| 国产乱码精品一品二品| 精品国产乱码久久久久久图片| 蜜桃视频在线观看一区二区| 欧美午夜精品理论片a级按摩| 亚洲精品亚洲人成人网在线播放| 成人综合日日夜夜| 国产精品免费免费| 99精品久久只有精品| 国产精品久久久久久福利一牛影视| 国产精品一二三四五| 久久无码av三级| 国产精品系列在线观看| 国产欧美一区二区三区网站| 国产精品一区免费视频| 国产欧美一区二区精品忘忧草| 国产大陆精品国产| 中文字幕一区二区三区不卡在线| 成人免费观看av| 一区二区三区在线观看动漫| 欧洲生活片亚洲生活在线观看| 亚洲精品免费在线| 欧美日韩亚洲综合在线| 青娱乐精品视频在线| 久久久午夜精品| 91性感美女视频| 婷婷国产在线综合| 亚洲精品一区在线观看| 成人高清视频在线| 亚洲成人免费影院| 日韩精品一区二| a在线欧美一区| 亚洲成人av福利| www激情久久| 色噜噜狠狠成人中文综合| 日韩黄色免费电影| 欧美高清在线一区| 欧美中文字幕一区| 韩国一区二区在线观看| 亚洲国产电影在线观看| 欧美在线观看视频在线| 精品一区二区在线看| 18成人在线观看| 欧美一级欧美三级| 成a人片亚洲日本久久| 五月天激情综合| 国产精品污污网站在线观看| 欧美色国产精品| 丰满少妇在线播放bd日韩电影| 亚洲国产日韩精品| 国产三级一区二区| 欧美巨大另类极品videosbest | 国产真实乱对白精彩久久| 自拍偷拍亚洲综合| 精品对白一区国产伦| 在线观看国产91| 国产suv精品一区二区883| 青青青爽久久午夜综合久久午夜| 国产精品网站在线观看| 91精品国产综合久久精品app | 精品写真视频在线观看| 亚洲伦理在线精品| 日本一区二区免费在线| 欧美电影免费观看高清完整版| 91理论电影在线观看| 在线观看精品一区| 国产成人在线色| 91超碰这里只有精品国产| 色先锋久久av资源部| 九色综合狠狠综合久久| 亚洲成人资源在线| 亚洲精品国产a| 中文字幕国产一区二区| 日韩久久久精品| 欧美一区二区视频在线观看2020| 91久久精品网| 91在线播放网址| 成人综合在线观看| 国产精品系列在线播放| 激情六月婷婷综合| 美腿丝袜亚洲综合| 日本午夜一本久久久综合| 亚洲国产精品嫩草影院| 亚洲在线中文字幕| 亚洲在线视频网站| 亚洲一二三区不卡| 亚洲v精品v日韩v欧美v专区| 亚洲精品视频一区二区| 亚洲日本在线看| 亚洲另类在线制服丝袜| 亚洲日韩欧美一区二区在线| 中文字幕一区二区三区不卡在线| 国产精品久久久久影视| 国产精品久久久久久久久晋中| 中文字幕精品一区| 18欧美亚洲精品| 一区二区在线观看免费| 亚洲综合在线免费观看| 亚洲资源在线观看| 日本亚洲一区二区| 国产在线视视频有精品| 国产黄色精品网站| 成人黄动漫网站免费app| 99re在线精品| 欧美日韩在线播放三区| 91精品国产手机| 26uuu亚洲| 中文字幕制服丝袜成人av| 自拍av一区二区三区| 亚洲午夜私人影院| 免费成人在线视频观看| 国产制服丝袜一区| 99久久精品国产导航| 欧美性高清videossexo| 日韩三级高清在线| 欧美高清在线一区二区| 一区二区三区四区视频精品免费 | 免费成人在线视频观看| 国产传媒日韩欧美成人| 日韩欧美一区二区不卡| 久久综合色婷婷| 一区二区三区资源| 九九视频精品免费| 色综合久久久久综合体桃花网| 7777精品伊人久久久大香线蕉超级流畅| 精品乱人伦小说| 亚洲精选在线视频| 韩国精品主播一区二区在线观看 | 国产视频一区二区在线观看| 亚洲男人的天堂在线观看| 日韩影院在线观看| 丁香婷婷深情五月亚洲| 欧美日韩一区二区在线视频| 2欧美一区二区三区在线观看视频| 国产精品福利一区二区| 日韩国产欧美在线播放| av在线播放不卡| 精品国产网站在线观看| 亚洲激情在线播放| 高清成人免费视频| 91麻豆精品91久久久久同性| 国产精品三级在线观看| 日本sm残虐另类| 色婷婷激情综合| 日本一区免费视频| 久久99精品网久久| 欧美三级一区二区| 亚洲天堂av一区| 国产精品456露脸| 日韩三级在线免费观看| 亚洲午夜一区二区| 91国在线观看| 1024成人网| gogo大胆日本视频一区| 亚洲精品一区二区三区99| 日韩av中文在线观看| 欧美在线小视频| 亚洲素人一区二区| 成人aaaa免费全部观看| 久久久99免费| 精品在线你懂的| 欧美一区二区视频在线观看2020| 亚洲线精品一区二区三区| 91在线观看成人| 亚洲视频你懂的| 成人av免费在线| 国产精品久久久久久福利一牛影视| 国产在线播放一区三区四| 日韩一卡二卡三卡国产欧美| 日本美女视频一区二区| 欧美日韩国产美女| 午夜久久福利影院| 91精品国产乱| 久久99久久99小草精品免视看|