isinstanceof java_scala中的isInstanceOf和asInstanceOf
如果實(shí)例化了子類(lèi)的對(duì)象,但是將其賦予了父類(lèi)類(lèi)型的變量,
在后續(xù)的過(guò)程中,又需要將父類(lèi)類(lèi)型的變量轉(zhuǎn)換為子類(lèi)類(lèi)型的變量,應(yīng)該如何做?
?? 首先,需要使用isInstanceOf 判斷對(duì)象是否為指定類(lèi)的對(duì)象,如果是的話(huà),則可以使用 asInstanceOf 將對(duì)象轉(zhuǎn)換為指定類(lèi)型;
?? 注意:p.isInstanceOf[XX] 判斷 p 是否為 XX 對(duì)象的實(shí)例;p.asInstanceOf[XX] 把 p 轉(zhuǎn)換成 XX 對(duì)象的實(shí)例
?? 注意:如果沒(méi)有用isInstanceOf 先判斷對(duì)象是否為指定類(lèi)的實(shí)例,就直接用 asInstanceOf 轉(zhuǎn)換,則可能會(huì)拋出異常;
?? 注意:如果對(duì)象是 null,則isInstanceOf 一定返回 false, asInstanceOf 一定返回 null;
? Scala與Java類(lèi)型檢查和轉(zhuǎn)換 Scala? Java obj.isInstanceOf[C]? obj instanceof C obj.asInstanceOf[C]? (C)obj classOf[C]? C.class
?? 舉例說(shuō)明:
package cn.itcast.extends_demo
class Person3 {}
class Student3 extends Person3
object Student3{
def main (args: Array[String] ) {
val p: Person3 = new Student3
var s: Student3 = null
//如果對(duì)象是 null,則 isInstanceOf 一定返回 false
println (s.isInstanceOf[Student3])
// 判斷 p 是否為 Student3 對(duì)象的實(shí)例
if (p.isInstanceOf[Student3] ) {
//把 p 轉(zhuǎn)換成 Student3 對(duì)象的實(shí)例
s = p.asInstanceOf[Student3]
}
println (s.isInstanceOf[Student3] )
}
}
Scala中g(shù)etClass 和 classOf
?? isInstanceOf 只能判斷出對(duì)象是否為指定類(lèi)以及其子類(lèi)的對(duì)象,而不能精確的判斷出,對(duì)象就是指定類(lèi)的對(duì)象;
?? 如果要求精確地判斷出對(duì)象就是指定類(lèi)的對(duì)象,那么就只能使用 getClass 和 classOf 了;
?? p.getClass 可以精確地獲取對(duì)象的類(lèi),classOf[XX]可以精確的獲取類(lèi),然后使用 == 操作符即可判斷;
?? 舉例說(shuō)明:
package cn.itcast.extends_demo
class Person4 {}
class Student4 extends Person4
object Student4{
def main(args: Array[String]) {
val p:Person4=new Student4
//判斷p是否為Person4類(lèi)的實(shí)例
println(p.isInstanceOf[Person4])//true
//判斷p的類(lèi)型是否為Person4類(lèi)
println(p.getClass == classOf[Person4])//false
//判斷p的類(lèi)型是否為Student4類(lèi)
println(p.getClass == classOf[Student4])//true
}
}
總結(jié)
以上是生活随笔為你收集整理的isinstanceof java_scala中的isInstanceOf和asInstanceOf的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 可视化:在窗口中显示一个球,该球以与水平
- 下一篇: 保护好自己