java高级 - 注解

怎甘沉沦 提交于 2019-12-18 04:36:06
/**
 * Created by Michael on 2019/12/17.
 * @interface代表注解
 */

@Target(ElementType.FIELD) //放到哪里,这里代表放到属性上面
@Retention(RetentionPolicy.RUNTIME) //什么时候起作用 .RUNTIME运行时 .CLASS编译时
public @interface ViewById {

    int value();

}

@interface代表声明一个注解,注解只是一个标识

使用注解:

public class MainActivity extends AppCompatActivity {

    @ViewById(R.id.tv)
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewUtils.inject(this);

        tv.setText("hello lzy!");

    }

}

如果不加ViewUtils.inject(),会报错,说明注解只是一个标识,我们还需要进行处理:

public class ViewUtils {

    public static void inject(Activity activity) {
        //获取activity的所有属性
        Field [] fields = activity.getClass().getDeclaredFields();
        //过滤关于ViewById的属性
        for (Field f:fields) {
            ViewById viewById = f.getAnnotation(ViewById.class);
            if (viewById != null){
                View view = activity.findViewById(viewById.value());
                f.setAccessible(true);
                try {
                    //设置属性值
                    f.set(activity,view);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }

        }


    }

}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!