java扩展函数_java调用kotlin的扩展方法、扩展属性、扩展函数
java扩展函数_java调⽤kotlin的扩展⽅法、扩展属性、扩展函
kotlin的扩展⽅法,其实是以java的静态⽅法形式存在的,也就是说如果要⽤java调⽤kotlin的扩展⽅法,和调⽤静态函数⼀样
调⽤扩展属性也是相同的道理
举个例⼦,我们在某个kotlin⽂件(⽂件名为Utils.kt)⾥为Throwable写⼀个根据错误类型返回错误消息的扩展⽅法:
ShowMsg1() = when(this){
is HttpException ->"${古人刻苦学习的故事
when(code()){
401 -> "⽂件未授权或证书错误"
403 -> "服务器拒绝请求"
什么的小溪
404 -> "服务器不到请求的⽂件"
408 -> "请求超时,服务器未响应"
500 -> "服务器内部错误)服务器遇到错误,⽆法完成请求。"
502 -> "服务器从上游服务器收到⽆效响应。"
503 -> "服务器⽬前⽆法使⽤"
504 -> "服务器从上游服务器获取数据超时"
太阳伞品牌else -> "服务器错误"
}
},错误码:${code()}"
is ParseException -> "json格式错误"
is JSONException -> "json解析错误"
is JsonParseException -> "json参数错误"
is SSLHandshakeException -> "证书验证失败"
is SocketTimeoutException -> "连接超时"
is UnknownHostException -> "⽹络链接失败"
is ErrnoException -> "⽹络不可访问"
is OnErrorNotImplementedException -> cause?.showMsg?:message?:"未知错误"
else -> message?:"未知错误"
}
在kotlin⾥可以直接调⽤:
fun printError(t:Throwable){
ShowMsg1())
}
在java⾥,会被编译成静态⽅法,调⽤时以静态⽅法的⽅式调⽤:
public void printError(Throwable t){
//java调⽤kotlin扩展⽅法:
//⽂件名.扩展名(扩展类),例如:ShowMsg1(t)
//注意,扩展⽅法写在Utils.kt⽂件⾥,因此类名应该是:UtilsKt
//以下写法与上⾯kotlin的写法等价
System.out.ShowMsg1(t));
}
扩展属性的调⽤与扩展⽅法类似,依然以返回错误类型的错误消息为例:
为Throwable写⼀个showMsg的扩展属性:
val Throwable.showMsg:String get() = when(this){
is HttpException ->"${
when(code()){
401 -> "⽂件未授权或证书错误"
403 -> "服务器拒绝请求"
404 -> "服务器不到请求的⽂件"
408 -> "请求超时,服务器未响应"
500 -> "服务器内部错误)服务器遇到错误,⽆法完成请求。"
502 -> "服务器从上游服务器收到⽆效响应。"
503 -> "服务器⽬前⽆法使⽤"
504 -> "服务器从上游服务器获取数据超时"
else -> "服务器错误"
}
},错误码:${code()}"
is ParseException -> "数据格式错误,请稍后重试"//后台返回的json格式有误,导致解析失败
is JSONException -> "发送的数据不正确,请稍后重试"//前端发送给后台的json格式有误
is JsonParseException -> "json参数异常导致解析失败" //后台返回的json格式有误,Gson解析失败is SSLHandshakeException -> "证书验证失败"
is SocketTimeoutException -> "连接超时,请稍后重试"应急演练总结
is TimeoutException -> "连接超时,服务器未在设定时间内回应,请稍后重试"
is UnknownHostException -> "⽹络链接失败"
is ErrnoException -> "⽹络不可访问"
is OnErrorNotImplementedException -> cause?.showMsg?:message?:"未知错误"
else -> message?:"未知错误"
}
在kotlin⾥调⽤该扩展属性:
2016安徽高考数学
fun printError(t:Throwable){
println(t.showMsg)
}
接龙
在java⾥调⽤
public void printError(Throwable t){
//kotlin的扩展属性,编译时同样会改成静态⽅法,// 调⽤⽅式与调⽤扩展⽅法类似
System.out.ShowMsg(t));
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。