kotlin学习demo
2019-08-08 本文已影响0人
high一马平川
1. kotlin学习demo
1.5 Kotlin系列之let、with、run、apply、also函数的使用
补充{
let、with、run、apply、also
var 我:Any
wo.also{
fun T.also(block: (T) -> Unit): T { block(this); return this }
表述 我创建一个方法 然后方法内部调用我 用it 返回我
}
我.apply{
fun T.apply(block: T.() -> Unit): T { block(); return this }
表达 创建一个方法 该方法来自我(持有我的引用)返回我
}
我.let{
fun <T, R> T.let(block: (T) -> R): R = block(this)
表述 我创建一个方法 然后方法内部调用我 用it 返回代码最后值
}
我.run{
fun <T, R> T.run(block: T.() -> R): R = block()
创建一个方法 该方法来自我(持有我的引用)返回代码最后值
}
with(我){
fun <T, R> with(receiver: T, block: T.() -> R): Rreceiver.block()
表达 创建一个方法 该方法来自我(持有我的引用) 返回代码最后值
}
2. kotlin mvp
3.kotlin学习demo
4.防止过快点击 面向切面
5.面向切面 学习(运行时动态权限申请)
补充:切点表达式:execution (* com.lqr...(..))。
execution(<修饰符模式>? <返回类型模式> <方法名模式>(<参数模式>) <异常模式>?)
//匹配所有的public方法
execution(public * *(..))
//匹配所有以"to"结尾的方法
execution(* *to(..))
//匹配com.lqr包下及其子包中以"to"结尾的方法
//注意-->
// 子包后面是两个点 com.lqr..
// 包后面是一个com.lqr.
//*后面必须加空格 * com
execution(* com.lqr..*to(..))
//匹配com.lqr包下所有返回类型是int的方法
execution(int com.lqr.*(..))
//匹配com.lqr包及其子包中的所有方法,当方法抛出异常时,打印"ex = 报错信息"。
@AfterThrowing(value = "execution(* com.lqr..*(..))", throwing = "ex")
@Pointcut("execution(* com.lqr.androidaopdemo.MainActivity.test(..))")
public void pointcut() {
}
@Before("pointcut()")
public void before(JoinPoint point) {
System.out.println("@Before");
}
@Around("pointcut()")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("@Around");
}
@After("pointcut()")
public void after(JoinPoint point) {
System.out.println("@After");
}
@AfterReturning("pointcut()")
public void afterReturning(JoinPoint point, Object returnValue) {
System.out.println("@AfterReturning");
}
@AfterThrowing(value = "pointcut()", throwing = "ex")
public void afterThrowing(Throwable ex) {
System.out.println("@afterThrowing");
System.out.println("ex = " + ex.getMessage());
}
}
//耗时计算
@Around("pointcut()")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
long beginTime = SystemClock.currentThreadTimeMillis();
joinPoint.proceed();
long endTime = SystemClock.currentThreadTimeMillis();
long dx = endTime - beginTime;
System.out.println("耗时:" + dx + "ms");
}