2016-04-06 9 views
-1

JavaではJsonProvider.javaRootlessJsonProvider.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

+2

[ 'JsonProvider'(http://docs.oracle.com/javaee/7/api/javax/json/spi/JsonProvider.html)をみると、私は、 'readFrom(...)'メソッドをオーバーライドすることはありません。どのライブラリを使用していますか? – AJNeufeld

+0

CXF-JAXRS:パッケージorg.apache.cxf.jaxrs.provider。バージョン3.1.5 –

+0

クラスのジェネリック型パラメータを保持していない理由は何ですか?私はあなたがそれを必要としない場合、最初のパラメータは 'クラスタイプ'ではなく、消去の問題を解決すると信じています。必要があれば、それを正しく追加することで問題を解決し、それを修正するための好ましい方法です。 –

答えて

1

関数のシグネチャは、あなたが適切にクラスを拡張する必要が

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<>(...); 
関連する問題