この記事では主にKotlinのアノテーションクラスの詳細と例に関する関連情報を紹介します
Kotlinのアノテーションクラスの詳細と例を参照してください
アノテーションステートメント
アノテーションとは、コードメソッドにメタデータを追加することです。アノテーションを宣言するには、クラスの前にアノテーション修飾子を配置します:
annotation class Fancy
アノテーションの追加プロパティは、アノテーション クラスにメタアノテーションを付けることで指定できます:
@Target は、次の要素を指定します。このアノテーションでアノテーションが付けられます。 可能なタイプ (クラス、関数、属性、式など)。
@Retention は、アノテーションがコンパイルされたクラス ファイルに保存されるかどうか、および実行時にリフレクションを通じて表示できるかどうかを指定します。 (デフォルトは両方とも true);
@Repeatable は、同じアノテーションを 1 つの要素で複数回使用することを許可します。は、生成された API ドキュメントのクラスまたはメソッドの署名に含める必要があります ( を参照)。
- AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION)
(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 {}許可されるパラメータの型は次のとおりです:
- Class (Foo
: : class
); - 上記の型の配列。 JVM は注釈属性の値として null を格納することをサポートしていないため、注釈パラメーターは null 許容型を持つことができません。
アノテーションが別のアノテーションのパラメーターとして使用される場合、その名前には @ 文字が接頭辞として付けられません:
-
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 コードは注釈とパラメーターを正常に認識できます。 import kotlin.reflect.KClass annotation class Ann(val arg1: KClass<*>, val arg2: KClass<out Any?>) @Ann(String::class, Int::class) class MyClass
ラムダ式
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
set (プロパティセッター)
param (コンストラクターパラメーター)
- delegate (デリゲートプロパティのデリゲートインスタンスを保存するフィールド)
拡張関数 Or パラメーターの受信をマークするためでは、次の構文を使用してください:
-
@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 サイトの他の関連記事を参照してください。

クラウドコンピューティングにより、Javaのプラットフォームの独立性が大幅に向上します。 1)JavaコードはBytecodeにコンパイルされ、異なるオペレーティングシステムでJVMによって実行され、クロスプラットフォーム操作が確保されます。 2)DockerとKubernetesを使用してJavaアプリケーションを展開して、携帯性とスケーラビリティを向上させます。

java'splatformendenceallowsdevelopersowritecodeodeonceanceandonitondeviceoros withajvm.

Dockerなどのコンテナ化技術は、Javaのプラットフォームの独立性を置き換えるのではなく、強化します。 1)環境全体の一貫性を確保し、2)特定のJVMバージョンを含む依存関係を管理する、3)展開プロセスを簡素化して、Javaアプリケーションをより順応性と管理しやすくする。

JREはJavaアプリケーションが実行される環境であり、その機能は、Javaプログラムが再コンパイルなしで異なるオペレーティングシステムで実行できるようにすることです。 JREの実用的な原則には、JVMがBytecodeを実行することが含まれます。クラスライブラリは、事前定義されたクラスとメソッド、構成ファイル、リソースファイルを提供して実行中の環境をセットアップします。

JVMは、自動メモリ管理とガベージコレクションを通じて効率的なJavaプログラムを確実に実行します。 1)メモリの割り当て:新しいオブジェクトのヒープ内のメモリを割り当てます。 2)参照カウント:オブジェクトの参照を追跡し、ゴミを検出します。 3)ガベージのリサイクル:タグクリア、タグチディ、またはコピーアルゴリズムを使用して、もはや参照されていないオブジェクトをリサイクルします。

intellijideaultimatiateバージョンを使用してスプリングを開始します...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール
