修复具有相同方法签名但新实现的子类的 "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<>(...);
在 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<>(...);