IntelliJ注解

Android support library从19.1版本开始引入了一个新的注解库,它包含很多有用的元注解,你能用它们修饰你的代码,帮助你发现bug。Support library自己本身也用到了这些注解,所以作为support library的用户,Android Studio已经基于这些注解校验了你的代码并且标注其中潜在的问题。Support library 22.2版本又新增了13个新的注解以供使用。

@TargetApi(Build.VERSION_CODES.M)//使用高编译版本的代码,为了通用性兼容运行此代码的低版本平台。要求程序员做出区分对待的加载。如用内部类等方式区分加载。

@javaScriptInterface

targetSdkVersion<17的时候,JS要访问Android提供的接口的时候需要加上此IntelliJ注解

 

方法重写: @CallSuper

如果你的API允许使用者重写你的方法,但是呢,你又需要你自己的方法(父方法)在重写的时候也被调用,这时候你可以使用@CallSuper标注:

 

执行注解

@Nullable注解能被用来标注给定的参数或者返回值可以为null。
类似的,@NonNull注解能被用来标注给定的参数或者返回值不能为null。

@NonNull注解能被用来标注给定的参数或者返回值不能为null。

 

 

资源类型注解

es-----android.R.anim

@ArrayRes----android.R.array

@AttrRes-----android.R.attr

@BoolRes----bool类型

@ColorRes-----android.R.color

@DrawableRes ----android.R.drawable

@IdRes----android.R.id

@IntegerRes----android.R.integer

@LayoutRes----android.R.layout

@MenuRes----android.R.menu

@RawRes----android.R.raw

@StringRes---android.R.string

@StyleableRes----android.R.styleable

@XmlRes---android.R.xml

除此之外,还有一个名为@AnyRes特殊的资源类型注解。它被用来标注一个未知的特殊类型的资源,但是它必须是一个资源类型。比如在框架中,它被用在Resources#getResourceName(@AnyRes int resId)上,使用的时候,你可以这样getResources().getResourceName(R.drawable.icon)用,也可以getResources().getResourceName(R.string.app_name)这样用,但是却不能这样getResources().getResourceName(42)用。

 

线程注解: @UiThread, @WorkerThread, …

(Support library 22.2及其之后版本支持.)

 

 @UiThread还是@MainThread?

在进程里只有一个主线程。这个就是@MainThread。同时这个线程也是一个@UiThread。比如activity的主要窗口就运行在这个线程上。然而它也有能力为应用创建其他线程。这很少见,一般具备这样功能的都是系统进程。通常是把和生命周期有关的用@MainThread标注,和View层级结构相关的用@UiThread标注。但是由于@MainThread本质上是一个@UiThread,而大部分情况下@UiThread又是一个@MainThread,所以工具(lint ,Android Studio,等等)可以把他们互换,所以你能在一个可以调用@MainThread方法的地方也能调用@UiThread方法,反之亦然。

@BinderThread

在android系统中,通过binder进行IPC时,服务端总是会起一些Binder线程来响应客户端的请求

 

 

 

  • @UiThread
  • @MainThread
  • @WorkerThread
  • @BinderThread

RGB颜色整型

当你的API期望一个颜色资源的时候,可以用@ColorRes标注,但是当你有一个相反的使用场景时,这种用法就不可用了,因为你并不是期望一个颜色资源id,而是一个真实的RGB或者ARGB的颜色值。

 

值约束: @Size, @IntRange, @FloatRange

  • 集合不能为空: @Size(min=1)
  • 字符串最大只能有23个字符: @Size(max=23)
  • 数组只能有2个元素: @Size(2)
  • 数组的大小必须是2的倍数 (例如图形API中获取位置的x/y坐标数组: @Size(multiple=2)
  • public void setAlpha(@IntRange(from=0,to=255) int alpha) { … }

 

权限注解: @RequiresPermission

返回值: @CheckResult

@VisibleForTesting

你可以把这个注解标注到类、方法或者字段上,以便你在测试的时候可以使用他们。

@Keep

我们还在注解库里添加了@Keep注解,但是Gradle插件还支持(尽管已经在进行中)。被这个注解标注的类和方法在混淆的时候将不会被混淆。

回值: @CheckResult

如果你的方法返回一个值,你期望调用者用这个值做些事情,那么你可以使用@CheckResult注解标注这个方法。

你并不需要微每个非空方法都进行标注。它主要的目的是帮助哪些容易被混淆,难以被理解的API的使用者。

比如,可能很多开发者都对String.trim()一知半解,认为调用了这个方法,就可以让字符串改变以去掉空白字符。如果这个方法被@CheckResult标注,工具就会对那些没有使用trim()返回结果的调用者发出警告。

 

@Throws(IOException::class)  如果一个方法要捕获一个异常可以用这个注解。

 

 

kotlin伴生对象

Java中 调用kotlin类的方法需要加上 
@JvmStatic 
调用kotlin类的成员变量需要加上 
@JvmField

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值