美文网首页
注解简单使用

注解简单使用

作者: 沈溺_16e5 | 来源:发表于2019-03-19 09:20 被阅读0次

1、创建 MyAnnotationLayout 注解(和创建类一样,把 class 选成 Annotation 就可以了)

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotationLayout {
    int MyLayout() default 0;
}

2、创建 MyAnnotationField 注解

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotationField {

    int MyView() default 0;

}

3、创建 MyAnnotationMethod 注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotationMethod {

    String MyString() default "";

}

4、在 Activity 应用 MyAnnotationLayout 注解

@MyAnnotationLayout(MyLayout = R.layout.activity_main)
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        myLayout();

    }

    private void myLayout() {

        try {
            Class aClass = Class.forName("com.example.reflect.MainActivity");

            boolean annotationPresent = aClass.isAnnotationPresent(MyAnnotationLayout.class);
            if (annotationPresent){
                MyAnnotationLayout annotation = (MyAnnotationLayout) aClass.getAnnotation(MyAnnotationLayout.class);

                int layout = annotation.MyLayout();

                Method setContentView = aClass.getMethod("setContentView", int.class);
                setContentView.invoke(this,layout);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
}

5、在 Activity 应用 MyAnnotationField 注解

@MyAnnotationLayout(MyLayout = R.layout.activity_main)
public class MainActivity extends AppCompatActivity {

    @MyAnnotationField(MyView = R.id.btn)
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        myLayout();
        myField();

    }

    private void myField() {

        try {
            Class aClass = Class.forName("com.example.reflect.MainActivity");

            Field btn1 = aClass.getDeclaredField("btn");

            boolean annotationPresent = btn1.isAnnotationPresent(MyAnnotationField.class);
            if (annotationPresent){
                MyAnnotationField annotation = btn1.getAnnotation(MyAnnotationField.class);

                int myView = annotation.MyView();

                Method findViewById = aClass.getMethod("findViewById", int.class);
                btn = (Button)  findViewById.invoke(this, myView);

                btn.setText("fdasdasdasdasdas");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

    private void myLayout() {

        try {
            Class aClass = Class.forName("com.example.reflect.MainActivity");

            boolean annotationPresent = aClass.isAnnotationPresent(MyAnnotationLayout.class);
            if (annotationPresent){
                MyAnnotationLayout annotation = (MyAnnotationLayout) aClass.getAnnotation(MyAnnotationLayout.class);

                int layout = annotation.MyLayout();

                Method setContentView = aClass.getMethod("setContentView", int.class);
                setContentView.invoke(this,layout);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
}

6、在 Activity 应用 MyAnnotationMethod 注解

@MyAnnotationLayout(MyLayout = R.layout.activity_main)
public class MainActivity extends AppCompatActivity {

    @MyAnnotationField(MyView = R.id.btn)
    Button btn;

    @MyAnnotationMethod(MyString = "http://www.baidu.com")
    public void get(){

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        myLayout();
        myField();
        myMythod();
    }

    private void myMythod() {

        try {
            Class aClass = Class.forName("com.example.reflect.MainActivity");

            Method get = aClass.getMethod("get");

            boolean annotationPresent = get.isAnnotationPresent(MyAnnotationMethod.class);
            if (annotationPresent){
                MyAnnotationMethod annotation = get.getAnnotation(MyAnnotationMethod.class);

                String string = annotation.MyString();
                btn.setText(string);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

    private void myField() {

        try {
            Class aClass = Class.forName("com.example.reflect.MainActivity");

            Field btn1 = aClass.getDeclaredField("btn");

            boolean annotationPresent = btn1.isAnnotationPresent(MyAnnotationField.class);
            if (annotationPresent){
                MyAnnotationField annotation = btn1.getAnnotation(MyAnnotationField.class);

                int myView = annotation.MyView();

                Method findViewById = aClass.getMethod("findViewById", int.class);
                btn = (Button)  findViewById.invoke(this, myView);

                btn.setText("fdasdasdasdasdas");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

    private void myLayout() {

        try {
            Class aClass = Class.forName("com.example.reflect.MainActivity");

            boolean annotationPresent = aClass.isAnnotationPresent(MyAnnotationLayout.class);
            if (annotationPresent){
                MyAnnotationLayout annotation = (MyAnnotationLayout) aClass.getAnnotation(MyAnnotationLayout.class);

                int layout = annotation.MyLayout();

                Method setContentView = aClass.getMethod("setContentView", int.class);
                setContentView.invoke(this,layout);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
}

相关文章

  • java注解

    简单实践 定义注解 注解使用 注解行为添加 测试

  • 注解简单使用

    1、创建 MyAnnotationLayout 注解(和创建类一样,把 class 选成 Annotation 就...

  • PlatformTransactionManager

    Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement ...

  • java注解应用在工厂模式上

    1.注解简单示例 使用注解的bean类 注解类 RetentionPolicy.RUNTIME----在运行时生成...

  • Mybatis使用注解开发

    使用注解开发 使用注解可以更快更方便的实现简单的sql语句,但是复杂的sql就不建议使用注解了 基本步骤 第一步:...

  • 【注解】使用注解来代替findViewById

    本文是使用注解代替findViewById的简单使用,在此之前,必须要了解什么是元注解,元注解有哪些,作用是什么?...

  • Java注解笔记

    首先看下列的一个简单自定义注解的例子:Table 注解 Column 注解 User 类(使用注解的类) 测试方法...

  • 注解的简单使用

    一、基本认识 我们知道,注释是给人看的,那么注解,其实就是给“程序”看的。 jdk内部注解(1.5之后): @De...

  • java 反射 注解 代理

    注解的使用通常配合反射使用动态代理需要反射机制配合简单说下注解:注解是元数据:数据的数据,可以给方法 类 变量增加...

  • Android 编译时注解 —— 语法详解

    java Type 详解 java 反射机制详解 注解使用入门(一) Android 自定义编译时注解1 - 简单...

网友评论

      本文标题:注解简单使用

      本文链接:https://www.haomeiwen.com/subject/ngzayqtx.html