Android カスタム注釈 (1)

新しいインターフェースを作成します。

public interface BindView {
}

このとき、インターフェイスの前に @ 記号を追加すると、この時点で IDE のファイル シンボルがコメントになっていることがわかります。

public @interface BindView {
}

次に、それがアノテーション内で使用されている場所をマークします。

@Target(ElementType.FIELD)
public @interface BindView {
}

このようにして、フィールドで使用できます。たとえば、アクティビティでは次のように使用します。

public class MainActivity4 extends AppCompatActivity {

    @BindView
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);
    }
}

複数のタイプに使用したい場合はどうすればよいですか? 中括弧を追加します。

@Target({ElementType.FIELD, ElementType.METHOD})

現時点では、フィールドだけでなくメソッドでも使用できます。

public class MainActivity4 extends AppCompatActivity {

    @BindView
    TextView textView;

    @BindView
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);
    }
}

実際、アノテーションの主な機能は何でしょうか? 主に識別に使用されます。このロゴは後で渡すことができます。リフレクションまたはアノテーターを通じてアノテーションを取得します。

次に、アノテーションのライフサイクルをマークする必要があります。

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface BindView {
}

ここで、ライフサイクルは 3 つあり、SOURCE は、ソース コードの段階でのみマークされ、CLASS ファイルにコンパイルされることを表します。

CLASS ステージ: CLASS ステージの場合、コンパイルされた CLASS ファイルに予約されます。しかし、JVM が CLASS ファイルをロードした後は存在しません。

RUNTIME ステージ: 全期間、アノテーション情報が存在します。

注釈に何かを追加します。

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface BindView {
    int value();
}

たとえば、戻り値が Int であるメソッドを追加しました。

次に、それを使用するときに、パラメータを渡す必要があります。

public class MainActivity4 extends AppCompatActivity {

    @BindView(1)
    TextView textView;

    @BindView(2)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);
    }
}

アノテーションに複数のメソッドが記述されている場合:

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface BindView {
    String value();
    int id();
}

使用:

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import com.example.myapplication.annotation.BindView;

public class MainActivity4 extends AppCompatActivity {

    @BindView(value = "text",id =1)
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);
    }
}

アノテーションの役割は何ですか?

/**
 * 注解,单独是没意义的
 * 一般是注解+APT(注解处理器) 用于生成一些JAVA文件 比如butterknife dagger2 hilt
 * 注解+代码埋点 ASpectJ arouter
 * 注解+反射
 */

おすすめ

転載: blog.csdn.net/howlaa/article/details/129678888