một đặc điểm kín giống như một lớp được niêm phong?
Theo như sealed
, có. Họ chia sẻ sự khác biệt bình thường giữa trait
và class
, tất nhiên.
Hoặc, nếu không, sự khác biệt là gì?
Moot.
Khi nào thì tốt hơn nên sử dụng đặc điểm được niêm phong (và khi nào không)?
Nếu bạn có sealed class X
, thì bạn phải kiểm tra X
cũng như bất kỳ lớp con nào. Điều này cũng không đúng với sealed abstract class X
hoặc sealed trait X
. Vì vậy, bạn có thể làm sealed abstract class X
, nhưng đó là cách chi tiết hơn so với chỉ trait
và ít lợi thế.
Ưu điểm chính của việc sử dụng abstract class
trên trait
là nó có thể nhận thông số. Lợi thế đó đặc biệt phù hợp khi sử dụng các lớp kiểu. Ví dụ: giả sử bạn muốn tạo một cây đã được sắp xếp.Bạn có thể viết này:
sealed abstract class Tree[T : Ordering]
nhưng bạn không thể làm điều này:
sealed trait Tree[T : Ordering]
kể từ khi giới hạn ngữ cảnh (và xem giới hạn) được thực hiện với các thông số ngầm. Do các đặc điểm không thể nhận được các thông số, bạn không thể làm điều đó.
Cá nhân tôi thích sealed trait
và sử dụng trừ khi một số lý do cụ thể khiến tôi sử dụng sealed abstract class
. Và tôi không nói về những lý do tinh vi, nhưng các lý do trực tiếp mà bạn không thể bỏ qua, chẳng hạn như sử dụng các lớp loại.
Nguồn
2012-06-26 16:48:33
Cảm ơn bạn. Với "tất cả các lớp con", nó có nghĩa là các lớp và các đặc điểm? –
Được bỏ phiếu tại sao? –
@ John - Tôi đã không cố gắng, nhưng tôi nghi ngờ các lớp học. Điểm về niêm phong là mọi thứ được xác định trong một đơn vị nguồn đó –