2016-06-07 293 views
0

我有一個變量用戶它是VertexProperty類型。當我在火花殼型用戶,我得到的,如何訪問從父類擴展的子類中的變量

res67: VertexProperty = User(273,0,A806683,Gustavo,Wilcox,127,NULL,Employee,1,0,0,1) 

我可以user.id訪問的用戶ID,但我無法訪問抵消,USERCODE並以這種方式其他屬性。爲什麼這樣?我如何訪問它們?我無法理解OOP的這些屬性。提前致謝。

VertexProperty定義如下:

class VertexProperty(val id:Long) extends Serializable 
case class User(val userId:Long, var offset:Int, val userCode:String, val Name:String, val Surname:String, val organizational_unit:String, val UME:String, val person_type:String, val SOD_HIGH:String, val SOD_MEDIUM:String, val SOD_LOW:String, val Under_mitigated:String) extends VertexProperty(userId) 
case class Account(val accountId:Long, var offset:Int, val userCode:String, val userId:String, val account_creation_date:String, var disabled:String, var forcechangepwd:String, var pwdlife:String, var numberloginerror:String, var lastchangepwd:String, var lastlogin:String, var lastwronglogin:String, var state:String, var expire:String, var last_cert_time:String, var creation_date:String, var creation_user:String,var challenge_counter:String, var challenge_failed_attempt:String) extends VertexProperty(accountId) //Check if userCode is actually the code in this example. 
case class Application(var applicationId:Long, var offset:Int, var Name:String, var Description:String, var Target:String, var Owner:String, var Ownercode:String, var Creation_date:String, var Creation_user:String) extends VertexProperty(applicationId) 
case class Entitlement(val entitlementId:Long, var offset:Int, val Name:String, var Code:String, var Description:String, var Type:String, var Application:String, var Administrative:String, var Parent_ID:String, var Owner_code:String, var Scope_type:String, var Business_name:String, var Business_policy:String, var SOD_high:String, var SOD_medium:String, var SOD_low:String) extends VertexProperty(entitlementId) 

回答

1

靜態類型的userVertexProperty。這意味着編譯器只知道它在編譯時有一個id字段,除非你將向下轉換爲其他類型,否則不會讓你訪問其他任何內容。

這工作,但被認爲是不好的做法:

user.asInstanceOf[User].offset 

它還將在運行時拋出一個ClassCastException如果是其實並不是一個User

這是稍微好一點,不會拋出異常:

user match { 
    case user: User => user.offset 
    case _ => // handle other cases 
} 

但要實現你想要做的就是重構你的代碼,使靜態類型的user真的User的最佳途徑。