static泛型方法

今天写一个static泛型方法,在本地eclipse没有问题,在服务器上编译不过去。
public static <T> T fromJson(String jsonStr, Type type){
		return gson.fromJson(jsonStr, type);
	}

调用时用 
SomeClass.fromJson(itemStr, new TypeToken<Map<Integer, Integer>>(){}.getType());

方法实际参数表中不能获得足够的类型信息,则要在方法体内转换。
public static <T> T fromJson(String jsonStr, Type type){
		return (T)gson.fromJson(jsonStr, type);
	}

改成如何则没用问题。

查看java泛型方法的使用有两种。
1. <对象名|类名>.<实际类型>方法名(实际参数表);
2. [对象名|类名].方法名(实际参数表);
当编译器不能从实际参数表中获得足够的类型信息时要用第一种方法。
(jdk1.5要用第一种,jdk1.6两种都行)
SomeClass.<Map<Integer, Integer>>fromJson(itemStr, new TypeToken<Map<Integer, Integer>>(){}.getType());

定义时:
[访问权限修饰符] [static] [final] <类型参数列表> 返回值类型 方法名([形式参数列表])

附Gson中的源码为:
@SuppressWarnings("unchecked")
  public <T> T fromJson(String json, Type typeOfT) throws JsonParseException {
    StringReader reader = new StringReader(json);
    T target = (T) fromJson(reader, typeOfT);
    return target;
  }

 @SuppressWarnings("unchecked")
  public <T> T fromJson(Reader json, Type typeOfT) throws JsonParseException {
    JsonElement root = new JsonParser().parse(json);
    T target = (T) fromJson(root, typeOfT);
    return target;
  }

@SuppressWarnings("unchecked")
  public <T> T fromJson(JsonElement json, Type typeOfT) throws JsonParseException {
    if (json == null) {
      return null;
    }
    JsonDeserializationContext context = new JsonDeserializationContextDefault(
        createDefaultObjectNavigatorFactory(deserializationStrategy), deserializers,
        objectConstructor);
    T target = (T) context.deserialize(json, typeOfT);
    return target;
  }




你可能感兴趣的:(java,eclipse,json)