Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用泛型类型作为类参数_Java_Json_Generics_Jackson - Fatal编程技术网

Java 使用泛型类型作为类参数

Java 使用泛型类型作为类参数,java,json,generics,jackson,Java,Json,Generics,Jackson,我有这门课 class X<T>{ public T dowhatever(){ //jackson parsing ObjectMapper mapper = new ObjectMapper(); T obj = mapper.readValue(jsonString, T); return obj; } } X类{ 公共部门{ //杰克逊解析 ObjectMapper mapper=新的O

我有这门课

class X<T>{
    public T dowhatever(){
         //jackson parsing
         ObjectMapper mapper = new ObjectMapper();
         T obj = mapper.readValue(jsonString, T);
         return obj;
    }
}
X类{
公共部门{
//杰克逊解析
ObjectMapper mapper=新的ObjectMapper();
T obj=mapper.readValue(jsonString,T);
返回obj;
}
}
但是显然,我不能将
t
传递给readValue方法。我需要一个
信息。有没有一种方法可以在不将
对象作为参数传递的情况下对其进行泛化

p、 s:
我省略了不必要的代码,留下了相关的代码

泛化它的唯一方法是通过一个子类将特定类作为泛型

class MyX extends X<Type> {
类MyX扩展了X{
您可以在运行时获得
类型,因为这必须可供编译器检查。

试试这个

class X<T> {
    @SuppressWarnings("unchecked")
    public void dowhatever(T... dummy){
        Class<T> classT = (Class<T>)dummy.getClass().getComponentType();
        System.out.println(classT);
    }
}

class Person { }
X类{
@抑制警告(“未选中”)
公共无效dowhatever(T…dummy){
类classT=(类)dummy.getClass().getComponentType();
系统输出打印LN(类别T);
}
}
类人{}

X=newx();
x、 dowhatever(/*无参数*/);/->class Person
或者您可以在构造函数中获取类对象

class X<T> {

    private final Class<T> classT;

    @SuppressWarnings("unchecked")
    public X(T... dummy) {
        classT = (Class<T>)dummy.getClass().getComponentType();
    }
}
X类{
私人期末班;
@抑制警告(“未选中”)
公共X(T…虚拟){
classT=(类)dummy.getClass().getComponentType();
}
}

如果没有类literal.C.f.这基本上是不可能的,或者至少是非常困难的
class X<T> {

    private final Class<T> classT;

    @SuppressWarnings("unchecked")
    public X(T... dummy) {
        classT = (Class<T>)dummy.getClass().getComponentType();
    }
}