簡體   English   中英

Java構造函數的Scala繼承

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM