Creamos una nueva interfaz:
public interface BindView {
}
En este momento, si agregamos un símbolo @ frente a la interfaz, en este momento, podemos ver que el símbolo de archivo del IDE se ha convertido en un comentario:
public @interface BindView {
}
A continuación, marcamos dónde se usa en la anotación:
@Target(ElementType.FIELD)
public @interface BindView {
}
De esta forma, podemos usarlo en el campo, por ejemplo, lo usamos así en la actividad:
public class MainActivity4 extends AppCompatActivity {
@BindView
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
}
}
¿Qué pasa si quiero usarlo en varios tipos? Agregar llaves:
@Target({ElementType.FIELD, ElementType.METHOD})
En este momento, no solo podemos usarlo en campos, sino también en métodos:
public class MainActivity4 extends AppCompatActivity {
@BindView
TextView textView;
@BindView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
}
}
De hecho, ¿cuál es la función principal de las anotaciones? Se utiliza principalmente para la identificación. Podemos pasar este logo más tarde. Obtener las anotaciones mediante reflexión o anotadores.
A continuación, debemos marcar el ciclo de vida de las anotaciones:
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface BindView {
}
Aquí hay tres ciclos de vida, SOURCE representa que solo se marca en la etapa del código fuente y se compila en un archivo CLASS.
Etapa CLASS: Si es la etapa CLASS, se reservará para el archivo CLASS compilado. Pero no existe después de que la JVM carga nuestro archivo CLASS.
Etapa RUNTIME: Todos los períodos, existe información de anotación.
Agregue algo a la anotación:
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface BindView {
int value();
}
Por ejemplo, agregamos un método cuyo valor de retorno es Int.
Luego, cuando lo usamos, necesitamos pasar parámetros en:
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);
}
}
Si se escriben varios métodos en la anotación:
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface BindView {
String value();
int id();
}
usar:
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);
}
}
¿Para qué sirve la función de las anotaciones?
/**
* 注解,单独是没意义的
* 一般是注解+APT(注解处理器) 用于生成一些JAVA文件 比如butterknife dagger2 hilt
* 注解+代码埋点 ASpectJ arouter
* 注解+反射
*/