`
yidianfengfan
  • 浏览: 125116 次
  • 性别: 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#泛型类、泛型方法、泛型接口、泛型委托的实例

    本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类是具有一个或多个类型参数的类。类型参数是在定义类时使用的占位符,实际的类型在创建类的实例时...

    泛型方法的使用.rar

    泛型方法是泛型的一种应用形式,它提高了代码的灵活性、类型安全性和性能。在本教程中,我们将深入探讨C#中的泛型方法的使用。 首先,让我们理解什么是泛型方法。泛型方法是在定义方法时引入了一个或多个类型参数,...

    c#泛型类、泛型方法、泛型接口、泛型委托

    泛型主要分为四个关键部分:泛型类、泛型方法、泛型接口和泛型委托。下面将详细介绍这四个方面。 1. 泛型类: 泛型类是具有一个或多个类型参数的类。这些类型参数是占位符,代表一种未知的数据类型,直到在创建类...

    Java定义泛型方法实例分析

    Java定义泛型方法实例分析 Java定义泛型方法是一种强大的技术,可以在编程中提供更多的灵活性和泛用性。在Java中,泛型方法可以在类、接口或方法中使用,以下是关于Java定义泛型方法的实例分析。 一、泛型方法的...

    实例186 - 泛型方法与数据查询

    泛型方法是Java编程语言中的一个重要特性,它允许在方法定义时指定类型参数,从而提高了代码的重用性和安全性。这种技术在数据查询场景中尤为关键,因为它可以确保操作的数据类型一致,避免了运行时可能发生的...

    Java泛型实例

    `&lt;T extends Comparable&lt;T&gt;&gt;`是泛型方法的声明,表明`T`必须是实现了`Comparable&lt;T&gt;`接口的类型。 至于标签提到的“方法”,泛型不仅可以应用于类和接口,也可以应用于方法。在方法中使用泛型可以确保方法参数和...

    Java中的泛型方法详解及简单实例

    泛型方法是泛型概念的一个重要组成部分,它们提供了更高级别的类型控制,使得代码更具可重用性和灵活性。本文将深入探讨Java中的泛型方法,包括其定义、调用方式以及使用场景。 1. **泛型方法的定义** 泛型方法与...

    Java泛型类与泛型方法的定义详解

    Java泛型类与泛型方法的定义详解 Java泛型类的定义是Java编程语言中的一种重要概念,它允许开发者在编写类时指定泛型类型,从而提高代码的灵活性和可读性。泛型类的定义主要用于容器类,例如ArrayList、LinkedList...

    java泛型的使用

    通过这些实例,你可以探索如何在实际编程中应用这些概念,如创建泛型集合,编写泛型方法,理解类型擦除的影响,以及在边界和通配符上的运用。学习和掌握Java泛型对于编写高效、类型安全的代码至关重要。在这个压缩包...

    浅谈java中定义泛型类和定义泛型方法的写法

    本文将深入探讨如何在Java中定义泛型类和泛型方法。 首先,我们来看一下泛型方法的定义。在Java中,泛型方法是在方法声明中引入类型参数的。例如,提供的代码片段中有一个名为`backSerializable`的泛型方法,它的...

    泛型讲解 类型通配符

    4. 泛型方法:`public static void test(List&lt;T&gt; c){...}` 类型通配符: 1. 定义:使用问号 `?` 作为类型通配符,例如 `List&lt;?&gt;`。 2. 作用:表示各种泛型的父类,例如 `List&lt;String&gt;` 和 `List&lt;Integer&gt;` 都是 `...

    java泛型指南 经典

    这对于实现泛型方法时非常有用,特别是在需要确定某个类型的实例是否符合某种类型条件时: ```java public static &lt;T&gt; boolean isInstanceOf(Class&lt;T&gt; clazz, Object obj) { return clazz.isInstance(obj); } ``` ...

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

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

    泛型用在类和方法上的写法

    泛型方法与泛型类不同,它是在方法级别引入类型参数。例如,一个交换两个元素的泛型方法: ```java public static &lt;T&gt; void swap(T[] array, int i, int j) { T temp = array[i]; array[i] = array[j]; array[j]...

    Java泛型应用实例

    泛型方法则是方法级别的泛型,它们在方法签名中定义类型参数。这些方法可以处理不同类型的数据,但仍然保持类型安全。例如,下面是一个简单的泛型方法,用于交换两个变量的值: ```java public static &lt;T&gt; void ...

    java 1.5泛型详解

    3. **泛型方法**:在方法签名中使用尖括号定义类型参数,如`public &lt;T&gt; void print(T t)`。 4. **泛型通配符**:`?`代表任意类型,可以用于限制或放宽类型参数。例如,`List&lt;?&gt;`表示未知类型的列表,`List...

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

    泛型方法是泛型类的一部分,它们可以在不指定具体类型的情况下定义,而在运行时根据传入的参数动态地绑定到特定类型。在C#的示例代码中,`Foo.GetTypeName()` 是一个泛型方法,它接受一个类型参数 `T`,并在运行时...

    C#泛型,非泛型实现枚举

    在某些情况下,如果我们的枚举类型是固定的,我们可能会选择非泛型方法。例如,我们可以创建一个特定于颜色的枚举类: ```csharp public class ColorCollection { private List&lt;Color&gt; colors = new List(); ...

    java 泛型

    泛型方法允许我们为方法的参数和返回值指定类型参数,增强了方法的灵活性。例如,`public static &lt;T&gt; void printList(List&lt;T&gt; list) { ... }`是一个泛型方法,它可以打印任何类型的列表。 5. **泛型与集合**:Java...

Global site tag (gtag.js) - Google Analytics