編輯:關於Android編程
我們平常在開發web項目的時候,經常會使用SSH來構建我們的項目,也有很多程序猿喜歡用注解來減少代碼量。但是各位屌絲程序猿們,大家有沒有想過這個注解是怎麼實現的呢。我們又該如何寫出像注解這麼優雅的代碼呢。除了我們平時在寫代碼的時候看到了新的東西之後始終保持探索的精神。還要有大家拿出極大的熱情刻苦專研和對待代碼一絲不苟的精神。這樣才能使得自己進步,寫出更加優雅的代碼。今天我帶大家來寫一個注解類,初始化android控件。
廢話少說,先上一段代碼。
package com.example.volley.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //聲明在field @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ViewInject { int value() default 0; }
首先看這段代碼,相信大家之前沒有寫過的童鞋肯定看的一頭霧水。所以我解釋一些。@interface這是java用來定義一個注解類。
@Target和@Retention這兩個是JDK提供的元注解。請看下面。
@Target(ElementType.TYPE) //接口、類、枚舉、注解
@Target(ElementType.FIELD) //字段、枚舉的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法參數
@Target(ElementType.CONSTRUCTOR) //構造函數
@Target(ElementType.LOCAL_VARIABLE)//局部變量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
@Retention(RetentionPolicy.RUNTIME) // 注解會在class字節碼文件中存在,在運行時可以通過反射獲取到
簡單解釋一下,比如ElementType.TYPE這個表示是一個類注解。比如struts2和springMVC的@controller
這個注解。
RetentionPolicy.RUNTIME表示會在class文件中運行是通過反射得到。
注解類寫好了,下面關鍵的是如何注解解析。
老辦法,先上代碼。
package com.example.volley.annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.app.Activity; public class ViewUtils { public static ViewUtils viewUtils; public Activity ctx; public ViewUtils(Activity ctx) { this.ctx = ctx; autoInjectAllField(); } public static ViewUtils inject(Activity ctx){ if (viewUtils!=null) { return viewUtils; }else{ viewUtils = new ViewUtils(ctx); return viewUtils; } } private void autoInjectAllField() { try { Class clazz = ctx.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(ViewInject.class)) { ViewInject inject = field.getAnnotation(ViewInject.class); int id = inject.value(); if(id > 0){ field.setAccessible(true); field.set(ctx, ctx.findViewById(id)); } } } } catch (Exception e) { e.printStackTrace(); } } }
通過ctx.getclass()得到實體類。然後得到這個類中所有的注解跟ViewInject注解類匹配。如果匹配成功,則set(ctx,ctx.findById());
使用ListView顯示一個長的項列表 1、新建一個名為“BasicView5”的Android項目; 2、修改BasicView5.java文件,修改後的程序如下: p
本文由嵌入式企鵝圈原創團隊成員、阿裡資深工程師Hao分享。上篇文章《Android無線開發的幾種常用技術》我們介紹了幾種android移動應用開發中的常用技術,其中的熱補
照例先看效果圖自定義代碼示例public class BezierView extends View { Paint paint;//畫筆 Path path;//路徑
1.創建HelloWorld項目任何編程語言寫出的第一個程序毫無疑問都會是Hello World,這已經是自20世紀70年代一直流傳下來的傳統,在編程界已成為永恆的經典,