Support Annotation Library注解使用详解

简介: 一.Support Annotation Library能做什么Support Annotation Library包含一系列的元注解,能够帮助开发者在编译期间发现可能存在的Bug,另外Android Studio本身就支持Annotation Library所以开发者无需再次添加依赖。

一.Support Annotation Library能做什么

Support Annotation Library包含一系列的元注解,能够帮助开发者在编译期间发现可能存在的Bug,另外Android Studio本身就支持Annotation Library所以开发者无需再次添加依赖。

二.常用注解详解

1.@NonNull与@Nullable注解

@NonNull:表示参数或者返回值不能为空。

@Nullable:表示参数或者返回值可以为空。

新建一个测试方法给参数加上@NonNull并且传参为null,这时方法会报警告,并且用Android Lint进行检查也会显示警告。

img_59eac935bfcf5eab89f79bb45852b798.png
image

当切换成@Nullable注解时警告则会消失

img_f85d9a36cca0f0cd4457361e8600f0f1.png
image

2.资源类型的注解

AnimatorRes:标记资源类型为android.R.animator类型

AnimRes:标记资源类型为android.R.anim类型

AnyRes:标记为任何一种资源类型

ArrayRes:标记资源类型为android.R.array类型

AttrRes:标记资源类型为android.R.attr类型

BoolRes:标记资源类型为布尔类型

ColorRes:标记资源类型是android.R.color类型

DrawableRes:标记资源类型为android.R.drawable类型

FractionRes:表示资源类型为fraction类型,这个比较少见,常见于Animation.xml中,比如50%p,表示占parent的50%。

IdRes:表示资源类型为android.R.id类型

IntegerRes:表示资源类型为android.R.integer类型

InterpolatorRes:表示资源类型为android.R.interpolator类型

LayoutRes:表示资源类型为android.R.layout类型

MenuRes:表示资源类型为androdi.R.menu类型

RawRes:表示资源类型为android.R.raw类型

StringRes:表示资源类型为android.R.string类型

StyleableRes:表示资源类型为android.R.styleable

StyleRes:表示资源类型为android.R.style类型

TransitionRes:表示资源类型为transition类型

XmlRes:表示资源类型为android.R.xml类型

资源型注解主要是防止因填写错误的资源类型而产生的错误,举个栗子:我们新建一个方法,在参数前加上@StringRes注解,然后调用的时候传入color类型,这时Android Studio会报错。

img_b94548ec21aea0ba1fd691546b7bb1ad.png
image

3.颜色类型的注解

颜色注解一共有两个,资源类型使用@ColorRes,在RGB或ARGB值则使用@ColorInt

img_a98b0fb0efe9228ab2e47746ff3d73a2.png
image

4.取值范围注解

●@Size:可以限制数组集合或者字符串的大小,例如:

@Size(min=3):可以表示字符串的最小字符数为3

@Size(max=23):可以表示集合的元素个数最大为23

@Size(2):可以表示数组的元素个数为2

@Size(multiple=2):可以表示数组的大小是2的倍数

●@IntRange:参数类型是int或lang,用法如下

private void test7(@IntRange(from = 0,to = 255)int alpha){
    
}

●FloatRange:参数类型是float或者double,用法如下

private void test8(@FloatRange(from = 0,to = 1)float alpha){

}

5.权限注解

Android应用在使用某些系统功能时,需要在AndroidManifest.xml中声名权限,否则在运行的时候可能会因为缺失对应的权限而发生错误,所以为了在编译期间及时发现缺失的权限,我们可以使用@RequiresPermission。

声明一个权限

 @RequiresPermission(Manifest.permission.INTERNET)
private void test8(){

}

声明最少一个权限

@RequiresPermission(anyOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE})
private void test8(){

}

声明多个权限

@RequiresPermission(allOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE})
private void test8(){

}

对于Intent调用所需权限,可在Action字符串定义处添加注解

img_8c80c637aa25d4b53823d4e60b164447.png
image

6.重写函数注解(要求必须调用父类的方法)

新建一个类MyTest,并新建方法test然后加上@CallSuper注解

public class MyTest {
    @CallSuper
    protected void test(){

    }
}

新建一个类MyTest2继承MyTest,重写test方法

public class MyTest2 extends MyTest {
    @Override
    protected void test() {
        super.test();
    }
}

如果将super.test()去掉则会报错。

img_cf4f84dbdaf90ce345bd4603276a49bb.png
image

7.@VisibleForTesting

单元测试中可能要访问到一些不可见的类、函数或者变量,这时可以使用@VisibleForTesting注解来对其可见

8.@Keep

@Keep注解用来标记在Proguard混淆过程中不需要混淆的类或者方法。

@Keep
public class MyTest {
    @CallSuper
    protected void test(){

    }
}

个人博客:https://myml666.github.io

目录
相关文章
|
6月前
|
Java Spring 容器
@Resource 这个注解什么用啊
@Resource 这个注解什么用啊
239 0
IDEA报错:Lombok Requires Annotation Processing
IDEA报错:Lombok Requires Annotation Processing
1172 0
IDEA报错:Lombok Requires Annotation Processing
|
2月前
|
Java Maven 数据库
Annotation Processing Tool自动生成代码
本文介绍了一种利用Java注解处理器(Annotation Processor)自动生成协议接收与发送类接口的方法,显著提升开发效率。注解处理器能在编译阶段扫描并处理特定注解,生成所需Java代码。文中详细展示了如何通过自定义`HttpProto`注解及对应的处理器`ProtoServiceProcessor`,实现在保存协议类后自动生成客户端请求工具和服务端控制器代码。此外,还提供了具体实现步骤、依赖配置及常见问题解决方案,如处理“服务配置文件不正确”错误和Gradle项目的配置方法。此技术特别适用于需要频繁处理协议或数据交互的应用场景。
33 1
|
3月前
|
Java Nacos 微服务
JSR-330 ‘javax.inject.Inject‘ annotation found and supported for autowiring
这篇文章讨论了在Spring Boot项目中遇到的JSR-330 `javax.inject.Inject`注解相关问题,以及如何解决因版本不兼容导致服务注册失败的问题。
IDEA添加Swagger2:Parameter 0 of method linkDiscoverers in org. springframework hateoas.config.Hateoasconfiguration required a single bean, but 15 were found:
IDEA添加Swagger2:Parameter 0 of method linkDiscoverers in org. springframework hateoas.config.Hateoasconfiguration required a single bean, but 15 were found
|
6月前
|
Java 编译器 程序员
JavaSE中注解(Annotation)详细介绍与实例
JavaSE中注解(Annotation)详细介绍与实例
65 0
|
11月前
|
XML 前端开发 Java
SpringMVC中context:annotation-config与mvc:annotation-driven和context:component-scan区别详解
SpringMVC中context:annotation-config与mvc:annotation-driven和context:component-scan区别详解
57 0
|
设计模式 Java 测试技术
【注解使用】使用@Autowired注解警告Field injection is not recommended
【注解使用】使用@Autowired注解警告Field injection is not recommended
311 0
|
Java Spring 容器
@Configuration注解
@Configuration注解
161 0
|
容器
@Configuration和@Component注解的区别
1.@Configuration和@Component注解的源码如下 (1)Configuration注解源码如下:
193 0