关于接口入参限定的简单测试对比-枚举和注解

入参限定方法一:枚举

enum Season1{

 Spring,

 Summer,

 Autumn,

 Winter

}

 

将枚举类型做为入参的类型,这样就可以起到限制入参类型的作用

public void methodName(Season season){}

 

这个方法对于开发者来说更常见,但是占用的内存比较大,这里做了一个简单的测试,看一下内存的占用情况。

使用枚举类型

public class Season2{

 enum Season{

  Spring,

  Summer,

  Autumn,

  Winter

 }

}

占用大概1.02KB

acaf6bb5276045079bffe11b8118a717.jpg

 

使用枚举类

public enum Season{

 Spring, Summer, Autumn, Winter

}

占用大概854B

6c72048283804055a7c698756b591781.jpg

 

 

入参限定方法二:注解

//限定值只能是SPRING,SUMMER,AUTUMN和WINTER

@IntDef({Season.SPRING,

  Season.SUMMER,

  Season.AUTUMN,

  Season.WINTER})

//定义当前@IntDef注解的保留策略,

//RetentionPolicy.SOURCE 表示此注解只会保留在源码中,编译时删除,不会保留到.class里面

@Retention(RetentionPolicy.SOURCE)

//定义注解可以使用的场景

//ElementType.PARAMETER 表示只能给形参注解

@Target(ElementType.PARAMETER)

//自定义一个注解接口

@interface Season{

 int SPRING = 0;

 int SUMMER = 1;

 int AUTUMN = 2;

 int WINTER = 3;

}

 

将枚举类型做为入参的类型,这样也可以起到限制入参类型的作用

public void methodName(@Season int season){}

 

注解相对于枚举来说比较冷门,但是对空间的占用更小了,是一种优化内存空间的方向

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

public class Season3{

    @IntDef({Season.SPRING,

            Season.SUMMER,

            Season.AUTUMN,

            Season.WINTER})

    @Retention(RetentionPolicy.SOURCE)

    @Target(ElementType.PARAMETER)

    @interface Season{

        int SPRING = 0;

        int SUMMER = 1;

        int AUTUMN = 2;

        int WINTER = 3;

    }

 @Retention(RetentionPolicy.SOURCE)

 @Target({ElementType.ANNOTATION_TYPE})

 public @interface IntDef {

  int[] value() default {};

  boolean flag() default false;

 }

}

内存占用大概588B

50cfcdd2f152445ba43ad78a12cb7cc6.jpg

 

在最后,我又试了一下直接定义int类型的常量,看看内存情况吧
public class Season1{
    public static final int Spring = 0;
    public static final int Summer = 1;
    public static final int Autumn = 2;
    public static final int Winter = 3;
}
内存占用大概328B

e25e56ba2be14dac9006319285235c39.jpg

 

所以大家会怎么选择呢?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值