android常用注解以及自定义注解替代枚举

2017-12-22  本文已影响388人  ccccccal

1. 自定义注解

/**
 * @author ALguojian
 * @date 2018/1/16
 * 自定义注解
 */
public interface UserType {

    String TOPIC = "topic";
    String ORIGIN = "origin";
    String MINI = "mini";

    @StringDef({TOPIC, ORIGIN, MINI})
    @Retention(RetentionPolicy.SOURCE)//指定注解仅存在与源码中,不加入到 class 文件中
    @interface Type {}
}

实体类:

public class User {

    @UserType.Type
    private String name;
    @NonNull
    private int age;

    public String getName() {
        return name;
    }
    public void setName(@UserType.Type String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

使用:


        User user = new User();
        user.setAge(12);
        user.setName(UserType.MINI);

        @UserType.Type String aa = UserType.MINI;

        switch (aa) {
            case UserType.MINI:
                break;
            default:
                break;
        }

2. @NoNull,不能为null

源码如下:

 @Retention(CLASS)
 @Target({METHOD, PARAMETER, FIELD})
 public @interface NonNull {
 }

3. @Nullable 可以为null

源码如下:

@Documented
@Retention(CLASS)
@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE})
public @interface Nullable {
}

4. Resource Type 资源类型注解

此类注解以Res结尾,比如@BoolRes, @IdRes, @IntegerRes, @StringRes, @ColorRes等,这里以@ColorRes为例说明

 @Documented
    @Retention(CLASS)
    @Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE})
    public @interface ColorRes {
    }

列子:

public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        getCurColor(R.id.ic_launcher);
    }
 
    void getCurColor(@ColorRes int color) {
        Toast.makeText(this, "Color: " + getString(color), Toast.LENGTH_LONG).show();
    }
}

我们给getColor函数的参数color加上了@ColorRes注解,即该参数是一个颜色资源,而上面我们上面传递的是id资源

5. 设置取值范围:Value Constraints

@Size, @IntRange, @FloatRange

private void test(@IntRange(from=0,to=100)int perent){

上一篇 下一篇

猜你喜欢

热点阅读