Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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_Generics_Jackson - Fatal编程技术网

Java 泛型的不兼容类型

Java 泛型的不兼容类型,java,generics,jackson,Java,Generics,Jackson,我定义jackoson serializer并将其作为JsonDeserialize添加到java类中,如下所示: @JsonDeserialize(using = ReportFilterDeserializer.class) 编译器给出了以下错误: error: incompatible types: Class<ReportFilterDeserializer> cannot be converted to Class<? extends JsonDeserialize

我定义jackoson serializer并将其作为JsonDeserialize添加到java类中,如下所示:

@JsonDeserialize(using = ReportFilterDeserializer.class)
编译器给出了以下错误:

error: incompatible types: Class<ReportFilterDeserializer> cannot be converted to Class<? extends JsonDeserializer<?>>
@JsonDeserialize(using = ReportFilterDeserializer.class)
错误:不兼容类型:无法将类转换为类>
@JsonDeserialize(使用=ReportFilterDeserializer.class)
注释的定义为:

public Class<? extends JsonDeserializer<?>> using() default JsonDeserializer.None.class;
public Class>using()默认JsonDeserializer.None.Class;
如果我从ReportFilterDeserializer中删除泛型attibute,它将通过编译。我不明白编辑为什么抱怨

class ReportFilterDeserializer<T> extends JsonDeserializer<ReportFilter<T>> {
    @Override
    public ReportFilter<T> deserialize(JsonParser jsonParser,DeserializationContext arg1) throws IOException,JsonProcessingException {
        return null;
    }
}
类ReportFilterDeserializer扩展JsonDeserializer{
@凌驾
公共ReportFilter反序列化(JsonParser JsonParser,反序列化上下文arg1)引发IOException,JsonProcessingException{
返回null;
}
}

这看起来确实很奇怪。我唯一能想到的是Jackson 1.x和2.x注释与类的意外混合(org.codehaus.Jackson is 1.x,com.fasterxml.Jackson 2.x)


不同JDK上的行为是否有所不同(例如,7对8,可能Java 8有问题?

此序列化对象的声明代码是什么样子的?您计划如何实现
反序列化
?如何确定JSON中的
T
?您可以看看这个:这就是我如何实现的。这个问题是关于泛型的,所以让我们把json ISSUE放在一边。@MaxZoom声明在问题中-看看using def:它的java 8,我将它拆分为单独的类并希望成功:@Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.FIELD,ElementType.TYPE,ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)public@interface Test{public Class>using()default JsonDeserializer.None.Class;}我能说的是,这看起来更像是一个Java 8错误,而不是Jackson的错误。:-(…特别是因为该代码在Java 7上编译正常。无论如何,它似乎可以解决Jackson 2.6的问题(请参阅问题),但不幸的是,无法对旧版本进行签名更改。我认为
javac
在这里是错误的,但解决方法确实是避免泛型反序列化器/序列化器:您需要使用具体类型。如有必要,可以通过简单的子分类。