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

Fixing "has the same erasure as..but does not override" for subclass w/ same method signature but new implementation?

在 java 中,我有一个 class 将 JsonProvider.java 扩展为 RootlessJsonProvider.java,允许 class 与 JSON 一起工作而无需根元素。

我正在尝试重写方法 readFrom,它仍然使用与实现它的 class 完全相同的方法签名定义:

    @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。

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<>(...);