một đặc điểm kín giống như một lớp kín?
Theo như sealed
đi, 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 nên sử dụng một đặc điểm kín (và khi không)?
Nếu bạn có một 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 tương tự 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 dài dòng hơn là chỉ trait
và ít lợi thế.
Ưu điểm chính của việc sử dụng abstract class
hơn a trait
là nó có thể nhận được các tham số. Lợi thế đó đặc biệt có liên quan khi sử dụng các loại lớp. Giả sử bạn muốn xây dựng một cây được sắp xếp, ví dụ. Bạn có thể viết điều 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]
vì giới hạn bối cảnh (và giới hạn xem) được thực hiện với các tham số ngầm. Cho rằng các đặc điểm không thể nhận được tham số, bạn không thể làm điều đó.
Cá nhân, tôi thích sealed trait
và sử dụng nó trừ khi một số lý do cụ thể khiến tôi sử dụng a sealed abstract class
. Và tôi không nói về những lý do tinh tế, nhưng những lý do trực diện mà bạn không thể bỏ qua, chẳng hạn như sử dụng các lớp loại.