はあなたが哺乳類私の()と人間の私は()natuarlly overidedされており、これは完璧に動作し、それが必要としてWSDLが生成されて表示された場合、私は今、次のstrucutreJavaのWebサービスおよび多型
public class Mammal
{
@WebMethod
public ArrayList<Mammal> getAll(){ return null; }
@WebMethod
public String speak(){ return "Unable to speak"; }
@WebMethod
public Mammal me(){ return this; }
}
@WebService
public class Human extends Mammal
{
@WebMethod
public ArrayList<Human> getAll(){ /* code to return all humans as ArrayList<Human> */ }
@WebMethod
public String speak() { return "Hai!"; }
@WebMethod(operationName="GetHuman")
public Human me(){ return this; }
}
を持っているとしましょうそれは私がoperationName = ""を追加するためです。
これまでのところ、ArrayListを返すメソッドはうまくいきません。 ArrayListは私の考えでは可能なArrayListをオーバーライドできません。
は今、私はこのために回避策発見し、結果がMammalクラスで続い
ように見える私の代わりにこれがあります。public ArrayList getAll(){ return null; }
を、私は今、この作品、手つかずHumnaクラスを残します。
ただし、これは、人間を拡張して新しいサブクラスからメソッドをオーバーライドすることは不可能なので、再び正方形に戻ります。
どうすれば解決できますか?
C#アプリケーションからWebサービスにアクセスしたいとしましょう。メソッドの戻り値の型がList HumanまたはList Whatever-extended-Mammalです。反対側に型キャストする必要はありません。
恐ろしい、これを試してみよう。 –
完璧に動作します、ありがとうございます。 <?いくつかのJavaマジックを拡張しますか? :) –
これは、「境界付きワイルドカードパラメータ化タイプ」と呼ばれます。 Javaのジェネリックに関するFAQはここにあります:http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html – janko