ホームページ Java &#&チュートリアル Kotlin アノテーション クラスのサンプル チュートリアルの共有

Kotlin アノテーション クラスのサンプル チュートリアルの共有

Jun 17, 2017 am 11:54 AM
kotlin 共有 チュートリアル 注釈

この記事では主にKotlinのアノテーションクラスの詳細と例に関する関連情報を紹介します

Kotlinのアノテーションクラスの詳細と例を参照してください

アノテーションステートメント

アノテーションとは、コードメソッドにメタデータを追加することです。アノテーションを宣言するには、クラスの前にアノテーション修飾子を配置します:


annotation class Fancy
ログイン後にコピー

アノテーションの追加プロパティは、アノテーション クラスにメタアノテーションを付けることで指定できます:

  1. @Target は、次の要素を指定します。このアノテーションでアノテーションが付けられます。 可能なタイプ (クラス、関数、属性、など)。

  2. @Retention は、アノテーションがコンパイルされたクラス ファイルに保存されるかどうか、および実行時にリフレクションを通じて表示できるかどうかを指定します。 (デフォルトは両方とも true);

  3. @Repeatable は、同じアノテーションを 1 つの要素で複数回使用することを許可します。は、生成された API ドキュメントのクラスまたはメソッドの署名に含める必要があります ( を参照)。

  4. @Target
    (AnnotationTarget.CLASS, AnnotationTarget.FUNCTION,

    AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION)
@Retention

(AnnotationRetention.SOURCE) @MustBeDocumented


注釈クラス Fancy

使用法

@Fancy class Foo {
  @Fancy fun baz(@Fancy foo: Int): Int {
    return (@Fancy 1)
  }
}
ログイン後にコピー
クラスのメインコンストラクター

に注釈を付ける必要がある場合は、コンストラクター宣言にコンストラクターキーワードを追加し、その前に注釈を追加する必要があります:


class Foo @Inject constructor(dependency: MyDependency) {
  // ……
}
ログイン後にコピー
プロパティ アクセサーに注釈を付けることもできます。


class Foo {
  var x: MyDependency? = null
    @Inject set
}
ログイン後にコピー

Constructor


注釈には、パラメーターを受け入れるコンストラクターを含めることができます。

annotation class Special(val why: String)

@Special("example") class Foo {}
ログイン後にコピー

許可されるパラメータの型は次のとおりです:


Java ネイティブ型 (Int、Long など) に対応する型


  1. Class (Foo

    : : class

    );
  2. 列挙;

  3. 上記の型の配列。

  4. JVM は注釈属性の値として null を格納することをサポートしていないため、注釈パラメーターは null 許容型を持つことができません。
  5. アノテーションが別のアノテーションのパラメーターとして使用される場合、その名前には @ 文字が接頭辞として付けられません:

  6. annotation class ReplaceWith(val expression: String)
    
    annotation class Deprecated(
        val message: String,
        val replaceWith: ReplaceWith = ReplaceWith(""))
    @Deprecated("This function is deprecated, use === instead", ReplaceWith("this === other"))
    ログイン後にコピー

    アノテーションのパラメーターとしてクラスを指定する必要がある場合は、Kotlin クラス (KClass) を使用します。 )。 Kotlin コンパイラーはそれを Java クラスに自動的に変換するため、Java コードは注釈とパラメーターを正常に認識できます。

  7. import kotlin.reflect.KClass
    
    annotation class Ann(val arg1: KClass<*>, val arg2: KClass<out Any?>)
    
    @Ann(String::class, Int::class) class MyClass
    ログイン後にコピー

  8. ラムダ式

アノテーションはラムダ式にも使用できます。これらは、ラムダ式本体を生成する invoke() メソッドに適用されます。これは、同時実行制御にアノテーションを使用する Quasar のようなフレームワークに役立ちます。


annotation class Suspendable

val f = @Suspendable { Fiber.sleep(10) }
ログイン後にコピー

アノテーションの使用対象


プロパティまたはメインコンストラクター

関数パラメーター

にアノテーションを付ける場合、対応する Kotlin 要素から生成される Java 要素が複数存在するため、生成される Java バイトコード内では、複数の可能な位置が存在します。この注釈は にあります。注釈の生成方法を正確に指定したい場合は、次の構文を使用します。

class Example(@field:Ann val foo,  // 标注 Java 字段
       @get:Ann val bar,   // 标注 Java getter
       @param:Ann val quux)  // 标注 Java 构造函数参数
ログイン後にコピー

同じ構文を使用して、ファイル全体に注釈を付けることができます。 これを行うには、ファイルの最上位、パッケージ ディレクティブの前、またはすべてのインポートの前 (ファイルがデフォルト パッケージにある場合) に、ターゲット ファイルを含む注釈を配置します。同じターゲットの注釈を使用する場合は、ターゲットの後に角括弧を追加し、すべての注釈を角括弧内に配置することで、ターゲットの重複を避けることができます。 (このターゲットのアノテーションは Java には表示されません)

field

get (プロパティゲッター)

set (プロパティセッター)

receiver (拡張関数、プロパティ、またはパラメーターのレシーバー)


param (コンストラクターパラメーター)


setparam (プロパティセッターパラメーター)

  1. delegate (デリゲートプロパティのデリゲートインスタンスを保存するフィールド)

  2. 拡張関数 Or パラメーターの受信をマークするためでは、次の構文を使用してください:

  3. @file:JvmName("Foo")
    
    package org.jetbrains.demo
    ログイン後にコピー

    ターゲットを指定しない場合、ターゲットは使用されているアノテーションの @Target アノテーションに基づいて選択されます。該当するターゲットが複数ある場合は、次のリストの最初の該当するターゲットが使用されます:
    • param

    • property

    • field

    Java 注解

    Java 注解与 Kotlin 100% 兼容:


    import org.junit.Test
    import org.junit.Assert.*
    import org.junit.Rule
    import org.junit.rules.*
    
    class Tests {
      // 将 @Rule 注解应用于属性 getter
      @get:Rule val tempFolder = TemporaryFolder()
    
      @Test fun simple() {
        val f = tempFolder.newFile()
        assertEquals(42, getTheAnswer())
      }
    }
    ログイン後にコピー

    因为 Java 编写的注解没有定义参数顺序,所以不能使用常规函数调用 语法来传递参数。相反,你需要使用命名参数语法。


    // Java
    public @interface Ann {
      int intValue();
      String stringValue();
    }
    // Kotlin
    @Ann(intValue = 1, stringValue = "abc") class C
    ログイン後にコピー

    就像在 Java 中一样,一个特殊的情况是 value 参数;它的值无需显式名称指定。


    // Java
    public @interface AnnWithValue {
      String value();
    }
    // Kotlin
    @AnnWithValue("abc") class C
    ログイン後にコピー

    如果 Java 中的 value 参数具有数组类型,它会成为 Kotlin 中的一个 vararg 参数:


    // Java
    public @interface AnnWithArrayValue {
      String[] value();
    }
    // Kotlin
    @AnnWithArrayValue("abc", "foo", "bar") class C
    ログイン後にコピー

    对于具有数组类型的其他参数,你需要显式使用 arrayOf:


    // Java
    public @interface AnnWithArrayMethod {
      String[] names();
    }
    // Kotlin
    @AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
    ログイン後にコピー

    注解实例的值会作为属性暴露给 Kotlin 代码。


    // Java
    public @interface Ann {
      int value();
    }
    // Kotlin
    fun foo(ann: Ann) {
      val i = ann.value
    }
    ログイン後にコピー

    以上がKotlin アノテーション クラスのサンプル チュートリアルの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dewuの使い方のチュートリアル Dewuの使い方のチュートリアル Mar 21, 2024 pm 01:40 PM

Dewu APP は現在非常に人気のあるブランド ショッピング ソフトウェアですが、ほとんどのユーザーは Dewu APP の機能の使い方を知りません。最も詳細な使用方法のチュートリアル ガイドは以下にまとめられています。次に、エディターがユーザーに提供する Dewuduo の概要です。機能の使い方チュートリアルですので、興味のある方はぜひご覧ください! Dewu の使い方チュートリアル [2024-03-20] Dewu の分割購入方法 [2024-03-20] Dewu クーポンの入手方法 [2024-03-20] Dewu マニュアルのカスタマーサービスの検索方法 [2024-03- 20] デューのピックアップコード確認方法 [2024-03-20] デューの購入場所 [2024-03-20] デューのVIP開放方法 [2024-03-20] デューの返品・交換申請方法

NetEase Cloud Music を WeChat Moments に共有する方法_NetEase Cloud Music を WeChat Moments に共有するチュートリアル NetEase Cloud Music を WeChat Moments に共有する方法_NetEase Cloud Music を WeChat Moments に共有するチュートリアル Mar 25, 2024 am 11:41 AM

1. まず、NetEase Cloud Music に入り、ソフトウェアのホームページ インターフェイスをクリックして、曲の再生インターフェイスに入ります。 2. 次に、曲の再生インターフェイスで、下の図の赤いボックスに示すように、右上隅にある共有機能ボタンを見つけて、クリックして共有チャンネルを選択し、共有チャンネルで「共有先」オプションをクリックします。下部にある [WeChat Moments] を選択すると、コンテンツを WeChat Moments に共有できます。

夏はぜひ虹を撮ってみてください 夏はぜひ虹を撮ってみてください Jul 21, 2024 pm 05:16 PM

夏の雨の後には、美しく魔法のような特別な天気の風景、虹がよく見られます。これも写真撮影ではなかなか出会えない光景で、とてもフォトジェニックです。虹が現れるにはいくつかの条件があります。まず、空気中に十分な水滴があること、そして、低い角度から太陽が当たることです。そのため、雨が上がった午後が最も虹が見えやすいのです。ただし、虹の発生は天候や光などの条件に大きく左右されるため、一般に虹の持続時間は短く、見頃や撮影に最適な時間はさらに短くなります。では、虹に遭遇したとき、どうすれば虹を適切に記録し、高品質の写真を撮ることができるでしょうか? 1. 虹を探す 上記の条件に加えて、虹は通常、太陽光の方向に現れます。つまり、太陽が西から東に輝いている場合、虹は東に現れやすくなります。

Baidu Netdisk で友達とファイルを共有する方法 Baidu Netdisk で友達とファイルを共有する方法 Mar 25, 2024 pm 06:52 PM

最近、Baidu Netdisk Android クライアントの新しいバージョン 8.0.0 がリリースされ、このバージョンには多くの変更が加えられただけでなく、多くの実用的な機能も追加されました。その中でも最も目を引くのがフォルダー共有機能の強化だ。ユーザーは簡単に友人を招待して仕事や生活で重要なファイルを共有できるようになり、より便利なコラボレーションと共有が実現します。では、友達と共有する必要があるファイルをどのように共有すればよいでしょうか? 以下では、このサイトの編集者が詳しく説明します。 1) Baidu Cloud APP を開き、まずホームページ上の関連フォルダーをクリックして選択し、次にインターフェイスの右上隅にある [...] アイコンをクリックします (以下を参照) 2) 次に、[+] をクリックします。 「共有メンバー」欄】を選択し、最後に全てにチェックを入れます

JUnit フレームワークのテスト メソッドにアノテーションはどのように使用されますか? JUnit フレームワークのテスト メソッドにアノテーションはどのように使用されますか? May 06, 2024 pm 05:33 PM

JUnit フレームワークのアノテーションは、テスト メソッドの宣言と構成に使用されます。主なアノテーションには、@Test (テスト メソッドの宣言)、@Before (テスト メソッドの実行前に実行されるメソッド)、@After (テスト メソッドの後に実行されるメソッド) があります。が実行される)、@ BeforeClass (すべてのテスト メソッドが実行される前に実行されるメソッド)、@AfterClass (すべてのテスト メソッドが実行された後に実行されるメソッド)、これらのアノテーションは、テスト コードを整理して簡素化し、テスト コードの信頼性を向上させるのに役立ちます。明確な意図と構成を提供することで、読みやすさと保守性を向上させます。

WeChat の支払い音をオフにする方法のチュートリアル WeChat の支払い音をオフにする方法のチュートリアル Mar 26, 2024 am 08:30 AM

1. まずWeChatを開きます。 2. 右上隅の[+]をクリックします。 3. QR コードをクリックして支払いを受け取ります。 4. 右上隅にある 3 つの小さな点をクリックします。 5. クリックして支払い到着の音声リマインダーを閉じます。

専門家が教える! Huawei携帯電話で長い画像をカットする正しい方法 専門家が教える! Huawei携帯電話で長い画像をカットする正しい方法 Mar 22, 2024 pm 12:21 PM

スマートフォンの継続的な発展に伴い、携帯電話の機能はますます強力になり、その中でも長時間の写真を撮る機能は、多くのユーザーが日常生活で使用する重要な機能の1つになりました。長いスクリーンショットは、ユーザーが長い Web ページ、会話記録、または写真を一度に保存して、簡単に表示したり共有したりできるようにするのに役立ちます。数ある携帯電話ブランドの中でも、ファーウェイの携帯電話はユーザーから高く評価されているブランドの一つでもあり、長い写真のトリミング機能も高く評価されています。この記事では、ファーウェイの携帯電話で長い写真を撮る正しい方法と、ファーウェイの携帯電話をより良く活用するための専門的なヒントを紹介します。

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? May 06, 2024 pm 10:09 PM

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化を制御します。 シリアル化: @JsonIgnore: プロパティを無視します @JsonProperty: 名前を指定します @JsonGetter: get メソッドを使用します @JsonSetter: set メソッドを使用します Deserialization: @JsonIgnoreProperties: プロパティ @ JsonProperty を無視します:名前を指定 @JsonCreator: コンストラクターを使用 @JsonDeserialize: カスタム ロジック

See all articles