[英]Scala inheritance of Java constructors
我需要有一個從java.math.BigDecimal
繼承的Scala類HugeDecimal
。 由於內部原因,它不能成為特征。 下面是簡單的實現:
class HugeDecimal extends java.math.BigDecimal {
}
引發此錯誤:
Error:(1187, 37) overloaded method constructor BigDecimal with alternatives:
(x$1: Long,x$2: java.math.MathContext)java.math.BigDecimal <and>
(x$1: Long)java.math.BigDecimal <and>
(x$1: Int,x$2: java.math.MathContext)java.math.BigDecimal <and>
(x$1: Int)java.math.BigDecimal <and>
(x$1: java.math.BigInteger,x$2: Int,x$3: java.math.MathContext)java.math.BigDecimal <and>
(x$1: java.math.BigInteger,x$2: Int)java.math.BigDecimal <and>
(x$1: java.math.BigInteger,x$2: java.math.MathContext)java.math.BigDecimal <and>
(x$1: java.math.BigInteger)java.math.BigDecimal <and>
(x$1: Double,x$2: java.math.MathContext)java.math.BigDecimal <and>
(x$1: Double)java.math.BigDecimal <and>
(x$1: String,x$2: java.math.MathContext)java.math.BigDecimal <and>
(x$1: String)java.math.BigDecimal <and>
(x$1: Array[Char],x$2: java.math.MathContext)java.math.BigDecimal <and>
(x$1: Array[Char])java.math.BigDecimal <and>
(x$1: Array[Char],x$2: Int,x$3: Int,x$4: java.math.MathContext)java.math.BigDecimal <and>
(x$1: Array[Char],x$2: Int,x$3: Int)java.math.BigDecimal
cannot be applied to ()
我知道我可以做:
class HugeDecimal(d: Double) extends java.math.BigDecimal(d) {
def this(str: String) = this(str.toDouble)
def this(i: Int) = this(i.toDouble)
}
但是我需要能夠從超類繼承所有構造函數,而不偏向任何單個超類構造函數。 即,我需要String構造函數調用超類的String構造函數。
從Java類繼承Scala的答案:選擇要調用的超級構造函數,然后在Scala中,如何子類化具有多個構造函數的Java類? 建議使用traits或由輔助構造函數委派的主構造函數,但是這些都不適合我的情況,因為需要從Java代碼中訪問這些代碼,這些代碼可以調用類似以下內容:
new HugeDecimal("12.34")
new HugeDecimal(1234)
我有什么解決方案,還是需要用Java實現此類?
您不能繼承構造函數。 在Java或Scala中實現它都沒有關系,如果要擁有多個構造函數,則必須實現它們中的每一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.