2011-07-17 46 views
20

Tôi có một lớp ngoại lệ tùy chỉnh như sau:Gọi Siêu Constructor

case class CustomException(errorMsg:String) extends Exception(error:String) 

Tất cả những gì tôi cần điều đó khi tôi bắt ngoại lệ là để ném ngoại lệ tùy chỉnh của tôi và thông qua thông báo lỗi của tôi để trừ tùy chỉnh. Tôi mong đợi từ hàm tạo CustomException để gọi siêu (errMsg) Tuy nhiên, đây không phải là những gì diễn ra và tôi gặp phải lỗi biên dịch.

catch { 
     case s: Exception => throw CustomException("This is a custom message") 
    } 

Làm thế nào tôi có thể gọi các nhà xây dựng siêu:

super(errorMessage) 

Trả lời

34
case class CustomException(errorMsg:String) extends Exception(errorMsg) 
+0

Thx. Tuy nhiên tôi tò mò tại sao Scala không có siêu (errorMsg) như Java không !! – Echo

+16

@Echo: Bởi vì nó không phải Java, và bởi vì một nhà xây dựng siêu có thể * chỉ * được gọi từ constructor chính của lớp, và thậm chí sau đó - nó chỉ có thể được gọi là hoạt động đầu tiên trong một constructor. Cú pháp của Scala đại diện cho hạn chế cơ bản này (như được áp đặt bởi JVM) –

+0

Điều gì xảy ra nếu bạn muốn cả hai hàm tạo ngoại lệ (chuỗi, throwable) và (string) được thực hiện trong ngoại lệ tùy chỉnh của bạn? – monzonj

7
case class CustomException(errorMsg:String) extends Exception(errorMsg) 

Bạn đang gọi constructor của lớp cha, nhưng lập luận bạn đang đi qua (error) không bị ràng buộc để bất cứ điều gì.

Các vấn đề liên quan