新しいインターフェースを作成します。
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
* 注解+反射
*/