Tôi đang viết một bảo vệ trait
rằng nên xác định các phương pháp clone
trả lại một CloneResult
, như vậy:Scala: Chỉ định phương pháp nào quan trọng hơn phương pháp
trait TraitWithClone extends Cloneable {
def clone: CloneResult
}
Mục đích ở đây là để thắt chặt các kiểu trả về của java.lang.Object
' s clone()
vào một cái gì đó hữu ích cho giao diện này. Tuy nhiên, khi tôi cố gắng biên dịch này, tôi nhận được:
error: overriding method clone in trait View2 of type()CloneResult; method clone in class Object of type()java.lang.Object has weaker access privileges; it should be public; (Note that method clone in trait View2 of type()CloneResult is abstract, and is therefore overridden by concrete method clone in class Object of type()java.lang.Object)
Làm thế nào tôi có thể yêu cầu một thực hiện được public
, khi Scala không có từ khóa? Tôi biết tôi có thể làm:
trait TraitWithClone extends Cloneable {
override def clone = cloneImpl
protected def cloneImpl: CloneResult
}
... nhưng điều đó có vẻ giống như hack. Bất kỳ đề xuất?
Liệu 'def bản sao ghi đè(): CloneResult' làm việc? –
Không; đó là điều đầu tiên tôi thử. –
Với dấu ngoặc đơn? –