Giả sử chúng ta có một lớp học như thế này:Thực thi mã trong constructor quá tải trước khi gọi này()
import java.net.URL
import xml._
class SearchData(xml: Node) {
def this(url: URL) = this (XML.load(url))
}
và chúng tôi muốn thực hiện một số mã trước khi gọi this (XML.load(url))
- nói thử nghiệm nó với try
. Một hy vọng rằng viết một cái gì đó như thế này sẽ làm việc:
class SearchData(xml: Node) {
def this(url: URL) {
try {
this (XML.load(url))
} catch {
case _ => this(<results/>)
}
}
}
nhưng nó sẽ không, bởi vì Scala yêu cầu bạn thực hiện cuộc gọi đến this()
báo cáo kết quả đầu tiên trong constructor quá tải và trong trường hợp này try
trở thành báo cáo kết quả đầu tiên .
Vậy giải pháp cho vấn đề này là gì?
Một giải pháp tốt cho vấn đề công bố, nhưng nó không phải là chung . Có lẽ đó là lỗi của tôi mà tôi tuyên bố một vấn đề tầm thường. Dù sao hãy kiểm tra http://stackoverflow.com/questions/7680442/executing-code-in-overloaded-constructor-prior-to-calling-this/7687567#7687567 có phần nào đó giải quyết được giải pháp của bạn –