修复具有相同方法签名但新实现的子类的"has the same erasure as..but does not override"?



在java中,我有一个类将JsonProvider.java扩展为RootlessJsonProvider.java,允许该类在没有根元素的情况下使用JSON。

我试图覆盖方法readFrom,它仍然使用与实现它的类完全相同的方法签名来定义:

    @Override
    public Object readFrom(final Class<Object> type, final Type genericType,
            final Annotation[] anns, final MediaType mtype,
            final MultivaluedMap<String, String> headers,
            final InputStream inputStream) {
        InputStream inputStreamNew = null;
        if (type != null) {
            final XmlRootElement rootElement = type
                    .getAnnotation(XmlRootElement.class);
            if (rootElement != null) {
                inputStreamNew = transformStreamForDropRootElement(rootElement,
                        inputStream);
            }
        }
        return super.readFrom(type, genericType, anns, mtype,
                headers, inputStreamNew);
    }

但所改变的只是实现,以允许无根json的使用。

随之而来的错误是:

The method readFrom(Class<Object>, Type, Annotation[], MediaType, MultivaluedMap<String,String>, InputStream) of type RootlessJsonProvider has the same erasure as readFrom(Class, Type, Annotation[], MediaType, MultivaluedMap, InputStream) of type MessageBodyReader but does not override it

更改方法名称也不起作用,因为它的用法不在实现范围内。

JsonProvider rootlessProvier = new RootlessJsonProvder();
rootlessProvider.rootlessReadFrom(....); //ERROR <---- this method doesn't exist as it's not defined in JsonProvider.java

没有任何基于该方法使用方式的参数是不太通用的类型,那么我该如何解决这个错误呢?

编辑:

JsonProvider.java

cxf-jaxrs 3.1.5版的一部分

函数签名是

class JsonProvider<T> {
    T readFrom(Class<T> ...) {
    }
}

您需要适当地扩展类。

class RootlessJsonProvider extends JsonProvider<SomeClassOfOurs> {
    @Override
    SomeClassOfOurs readFrom(Class<SomeClassOfOurs> ...) {
    }
}
JsonProvider<SomeClassOfOurs> rootlessProvider = new RootlessJsonProvider(...);

或者,

class RootlessJsonProvider<T> extends JsonProvider<T> {
    @Override
    T readFrom(Class<T> ...) {
    }
}
JsonProvider<SomeClassOfOurs> rootlessProvider = new RootlessJsonProvider<>(...);

相关内容

最新更新