2008-10-05 30 views
74

Cho phép nói rằng tôi có đoạn mã sau:Explicit Loại Chuyển đổi trong Scala

abstract class Animal 
case class Dog(name:String) extends Animal 
var foo:Animal = Dog("rover") 
var bar:Dog = foo //ERROR! 

Làm thế nào để sửa chữa các dòng cuối cùng của mã này? Về cơ bản, tôi chỉ muốn làm những gì, trong một ngôn ngữ giống như C sẽ được thực hiện:

var bar:Dog = (Dog) foo 

Trả lời

133

Tôi đã tự tìm ra điều này. Có hai giải pháp:

1) Làm diễn viên rõ ràng:

var bar:Dog = foo.asInstanceOf[Dog] 

2) Sử dụng mô hình phù hợp để cast nó cho bạn, điều này cũng bắt lỗi:

var bar:Dog = foo match { 
    case x:Dog => x 
    case _ => { 
    // Error handling code here 
    } 
} 
+0

Bạn không cần khối. – Anonymous

+0

Ẩn danh: chặn nào? –

+13

Lưu ý, cách thứ hai là dễ bị lỗi trên generics do loại JVM erasure –

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