您好,登錄后才能下訂單哦!
本篇內容介紹了“Scala擴大內部類作用域的方式有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
內部類初始用戶,內部類的作用域屬于:外部類對象,不同外部類對象中的內部類對象類型不同會報錯type mismatch。
實例代碼:
注意:
定義了一個外部類Person 和一個內部類Student
package com.hadoop.ljs.spark.studyimport scala.collection.mutable.ArrayBuffer/** * @author: Created By lujisen * @company ChinaUnicom Software JiNan * @date: 2020-02-08 22:49 * @version: v1.0 * @description: com.hadoop.ljs.spark.study */class Person { class Student(val name:String){} val students=new ArrayBuffer[Student] def getStudent(name:String):Student={ return new Student(name) }}
主函數:
這里person2對象里面的student內部類對象 和person1對象里面的內部類對象報錯 type mismatch
報錯原因:由于默認情況下,內部類的作用域是:外部類對象 一定記住是外部類對象*
package com.hadoop.ljs.spark.study
/**
* @author: Created By lujisen
* @company ChinaUnicom Software JiNan
* @date: 2020-02-08 22:19
* @version: v1.0
* @description: com.hadoop.ljs.spark.study
*/
object PersonTest{
def main(args: Array[String]): Unit = {
val person1=new Person()
val studentA=person1.getStudent("ljs1")
person1.students+=studentA
val person2=new Person()
val studentB=person2.getStudent("ljs2")
/*這里person2對象里面的student內部類對象 和person1對象里面的內部類對象報錯 type mismatch
* 這里由于默認情況下,內部類的作用域是:外部類對象 一定記住是外部類對象*/
person1.students+=studentB
}
}
報錯截圖:
有兩種方式來擴大內部類對象作用域:
第一種方式:通過派生類對象
代碼實例:
直接把Student定義在伴生對象object Person中,程序運行正常
package com.hadoop.ljs.spark.studyimport com.hadoop.ljs.spark.study.Person2.Studentimport scala.collection.mutable.ArrayBuffer/** * @author: Created By lujisen * @company ChinaUnicom Software JiNan * @date: 2020-02-08 22:43 * @version: v1.0 * @description: com.hadoop.ljs.spark.study */object Person2{ class Student(val name:String){}}class Person2 { val students=new ArrayBuffer[Person2.Student] def getStudent(name:String):Student={ return new Student(name) }}
主函數類不再報錯了:
package com.hadoop.ljs.spark.study
/**
* @author: Created By lujisen
* @company ChinaUnicom Software JiNan
* @date: 2020-02-08 22:37
* @version: v1.0
* @description: com.hadoop.ljs.spark.study
*/
object PersonTest2 {
def main(args: Array[String]): Unit = {
val person1=new Person2()
val studentA=person1.getStudent("ljs1")
person1.students+=studentA
val person2=new Person2()
val studentB=person2.getStudent("ljs2")
person1.students+=studentB
}
}
第二種方式擴大內部類作用域:類型投影
Person類代碼:
注意:
代碼第14行,這里用了Person#Student 用的是“#”號 通過類型映射:只要你是外部類的內部類對象我都識別為類型相同*/
package com.hadoop.ljs.spark.study
import scala.collection.mutable.ArrayBuffer
/**
* @author: Created By lujisen
* @company ChinaUnicom Software JiNan
* @date: 2020-02-08 22:55
* @version: v1.0
* @description: com.hadoop.ljs.spark.study
*/
class Person3 {
class Student(val name:String){}
/*注意這里用了Person#Student 用的是“#”號 通過類型映射:只要你是外部類的內部類對象我都識別為類型相同*/
val students=new ArrayBuffer[Person3#Student]
def getStudent(name:String):Student={
return new Student(name)
}
}
“Scala擴大內部類作用域的方式有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。