`
yidianfengfan
  • 浏览: 124207 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

static泛型方法

    博客分类:
  • java
阅读更多
今天写一个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;
  }




分享到:
评论

相关推荐

    简单学习C#中的泛型方法使用

    泛型方法是使用类型参数声明的方法,如下所示: static void Swap(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } 下面的代码示例演示一种使用 int 作为类型参数的方法调用方式: ...

    java泛型总结.docx

    例如,public static &lt;T&gt; T max(T[] array)表示一个返回最大元素的泛型方法。 通配符:可以使用通配符来限制类型参数的范围。例如,List表示一个可能是Number或其子类类型的列表。 类型推断:在Java 7及以上版本中,...

    Java.SE 自定义泛型与泛型的常见陷阱

    Java.SE 自定义泛型与泛型的常见陷阱Java.SE 自定义泛型与泛型的常见陷阱

    C#泛型方法在lua中表示的一种设计详解

    在进行lua方法注册的时候, 大多数解决方案直接否定了泛型方法, 因为在lua侧难以表达出泛型, 以及lua的函数重载问题, 函数重载问题可以通过一些特殊方法解决, 而泛型问题是主要问题, 以Unity + Slua的情况来说 比如...

    nullWolf007#Notes#泛型1

    声明静态泛型方法,将泛型类型\置于方法中关键字static之后public static &lt;E&gt; void functionName(E[] list)示

    C# 泛型数组学习小结

    这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的数据很有用。IList&lt;T&gt; 接口不能用于在数组中添加或移除元素;如果试图在此上下文中调用 IList&lt;T&gt; 方法(如数组的 ...

    cpp-这是一个关于数据结构的C语言静态链接库支持泛型

    This is a static lib about datastruct.Supports generics. 这是一个关于数据结构的C语言静态链接库,支持泛型。

    详细介绍C# 泛型

    在C#开发中,必不可少的要用到泛型。...static void Main(string[] args) { //不是泛型的集合类 ArrayList list = new ArrayList(); //添加一个值类型 装箱操作 list.Add(12); //去除第一个元素12 拆

    Java-泛型的使用

    public static T(返回值类型) 方法名(一个对应泛型的参数) { //方法体 } 自定义的泛型声明在返回值之前,保证返回值以及参数都可以使用自定义的泛型。 在方法上定义的泛型,需要通过调用方法时通过给定的参数来...

    Java SE编程入门教程 java泛型(共11页).pptx

    Java SE编程入门教程 java static final(共24页).pptx Java SE编程入门教程 java this和super(共10页).pptx Java SE编程入门教程 java 常用API(共22页).pptx Java SE编程入门教程 javaGUI编程快速入门(1)(共...

    C#泛型实例详解

    本文以实例形式讲述了C#泛型的用法,有助于读者深入理解C#泛型的原理,具体分析如下: 首先需要明白什么时候使用泛型: 当针对不同的数据类型,... static void Main(string[] args) { SortHelper&lt;int&gt; isorter = new

    深入浅析C#泛型类型

    上篇文章给大家介绍了浅析C# 中的类型系统(值类型和引用类型),接下来通过本文给大家介绍下c# 泛型类型, 说下C#中的泛型,熟练地使用泛型能提高代码的重用性,使用我们代码瞬间就高大上了,当然只有一点点,真的...

    JDK 1.5的泛型實現(Generics in JDK 1.5)

    static methods的形 式呈現,例如 sort() , max(), min(), copy(), fill()。圖 5是兩個運用實例,其 語法和 C++完全相同:使用 generic algorithms時並不需要以角括號( )為「參 數化型別」做任何具體指定。這...

    Day 13 泛型、匿名内部类和集合

    Day 13 1. 泛型 1.1 什么是泛型,为什么引入泛型 目前项目,功能是可以考虑之后的复用的。当前代码值支持Student类,如果需要更换数据类型,智能重新完成对应... public static 返回值类型[自定义类型] 方法名(自定

    static-dispatch:Common Lisp的静态泛型函数分派

    将编译器宏函数添加到泛型函数中,该泛型函数确定参数的类型,并将函数调用形式替换为最特定的适用方法的主体。 如果无法确定类型,或者没有足够的类型信息,则按原样保留泛型函数调用。 因此,为了在编译时而不是...

    230426-048shopDemo(以泛型方式定义的递归方法构建树型结构数据的2种实现方法)

    public static void TreeBuilder(List&lt;T&gt; all, T currentParentItem, long? parentId = null, string idProperty = "Id", string parentIdProperty = "ParentId", string childrenProperty = "ChildrenCollection...

    C#实现利用泛型将DataSet转为Model的方法

    本文实例讲述了C#实现利用泛型将DataSet转为Model的方法。分享给大家供大家参考。具体如下: 因为网站需要用C#开发,习惯了java的泛型,所以看了一下C#下,也可以这样做,随便写了一个。 public static List&lt;T&gt; ...

    Java泛型与类型擦除

    “编译器会进行泛型擦除”是一个常识了(好吧,实际擦除的是参数和自变量的类型)。这个过程由“类型擦除”实现。但是并非像许多开发者认为的那样,在 &lt;..&gt; 符号内的东西都被擦除了。看下面这段代码: public ...

    每夜staticvec-使用const泛型实现由数组支持的固定容量堆栈分配的Vec替代方案-Rust开发

    此板条箱不对任何内容使用文字静态变量(但提供了多种将staticVec实例化为static或const的方法。变量(如果需要)。 通过为staticvec依赖项设置default-features = false,完全兼容#![no_std](几乎没有功能损失)

    .net泛型通用函数的特殊问题的解决方法

    自从2.0版本的net framework推出之后泛型(Generic)得到了广泛好评。它不必像object类型一样性能上因为“拆箱”或者“装箱”得到损失,同时在编译语法检测阶段就可以实时检测...public static void Sort(T[] array){ 

Global site tag (gtag.js) - Google Analytics