第53章 アノテーションの継承


概要

JAX-RS アノテーションは、アノテーション付きインターフェイスを実装するサブクラスとクラスによって継承できます。継承メカニズムにより、サブクラスと実装クラスは、親から継承されたアノテーションを上書きできます。

概要

継承は、開発者が特定のニーズに対応するために特化できる汎用オブジェクトを作成できるため、Java で最も強力なメカニズムの 1 つです。JAX-RS は、クラスをリソースにマッピングする時に使用されるアノテーションをスーパークラスから継承できるようにすることで、この機能を維持します。

JAX-RS のアノテーション継承は、インターフェイスのサポートも拡張します。実装クラスは、実装するインターフェイスで使用される JAX-RS アノテーションを継承します。

JAX-RS 継承ルールは、継承されたアノテーションをオーバーライドするメカニズムを提供します。ただし、JAX-RS アノテーションをスーパークラスまたはインターフェイスから継承するコンストラクトから完全に削除することはできません。

継承ルール

リソースクラスは、実装するインターフェイスから JAX-RS アノテーションを継承します。リソースクラスは、拡張しているスーパークラスから JAX-RS アノテーションも継承します。スーパークラスから継承されたアノテーションは、インターフェイスから継承されたアノテーションよりも優先されます。

例53.1「アノテーションの継承」のコード例では、Kaijin クラスの getMonster() メソッドは、Kaiju インターフェイスから @Path@GET、および @PathParam アノテーションを継承します。

例53.1 アノテーションの継承

public interface Kaiju
{
  @GET
  @Path("/{id}")
  public Monster getMonster(@PathParam("id") int id);
  ...
}

@Path("/kaijin")
public class Kaijin implements Kaiju
{
  public Monster getMonster(int id)
  {
    ...
  }
  ...
}

継承されたアノテーションの上書き

継承されたアノテーションの上書きは、新しいアノテーションを指定するのと同じくらい簡単です。サブクラスまたは実装クラスがメソッドに独自の JAX-RS アノテーションを指定した場合に、そのメソッドのすべての JAX-RS アノテーションは無視されます。

例53.2「アノテーションの継承の上書き」 のコード例では、Kaijin クラスの getMonster() メソッドは Kaiju インターフェイスからのアノテーションを継承しません。実装クラスは @Produces アノテーションをオーバーライドします。これにより、インターフェイスからのすべてのアノテーションが無視されます。

例53.2 アノテーションの継承の上書き

public interface Kaiju
{
  @GET
  @Path("/{id}")
  @Produces("text/xml");
  public Monster getMonster(@PathParam("id") int id);
  ...
}

@Path("/kaijin")
public class Kaijin implements Kaiju
{

  @GET
  @Path("/{id}")
  @Produces("application/octect-stream");
  public Monster getMonster(@PathParam("id") int id)
  {
    ...
  }
  ...
}
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.