Anotaciones personalizadas de Android (1)

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
 * 注解+反射
 */

Supongo que te gusta

Origin blog.csdn.net/howlaa/article/details/129678888
Recomendado
Clasificación