Android定义常量的三种方式

本文探讨了Java中Class、Enum和Annotation定义常量的三种方式,重点比较了它们的优缺点:Enum便于组织常量,Annotation提供了源码级注解及输入验证功能。同时介绍了如何在Switch语句中利用@IntDef注解进行非法值校验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Class定义常量

public class Constant {

    public static final int SUNDAY = 0;
    public static final int MONDAY = 1;
    public static final int TUESDAY = 2;
    public static final int WEDNESDAY = 3;
    public static final int THURSDAY = 4;
    public static final int FRIDAY = 5;
    public static final int SATURDAY = 6;
}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        printDay(Constant.FRIDAY);
    }

    private void printDay(int value){
        System.out.println(value);
    }
}

Enum定义常量

public class Constant {
    
    public enum WeekDays {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        printDay(Constant.WeekDays.FRIDAY);
    }

    private void printDay(Constant.WeekDays value){
        System.out.println(value);
    }
}

Annotation定义常量

public class Constant {

    @IntDef({
            WeekDays.SUNDAY,
            WeekDays.MONDAY,
            WeekDays.TUESDAY,
            WeekDays.WEDNESDAY,
            WeekDays.THURSDAY,
            WeekDays.FRIDAY,
            WeekDays.SATURDAY
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface WeekDays{

        int SUNDAY = 0;
        int MONDAY = 1;
        int TUESDAY = 2;
        int WEDNESDAY = 3;
        int THURSDAY = 4;
        int FRIDAY = 5;
        int SATURDAY = 6;
    }
}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        printDay(Constant.WeekDays.FRIDAY);
    }

	//可以通过注解入参做非法输入值的校验
    private void printDay(@Constant.WeekDays int value){
        System.out.println(value);
    }
}

对比

  1. Enum定义常量相对于Class定义常量能够将常量进行分组;
  2. Annotation定义常量相比于Enum定义常量不仅可以通过@Retention注解使得注解在源文件有效,不参与编译消耗内存空间而且通过Android中的@IntDef注解还可做入参非法输入值的校验。

Tip

  1. switch下使用@IntDef注解的tip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值