Scala наследование конструкторов Java
Мне нужно иметь класс Scala HugeDecimal
которые наследуют от java.math.BigDecimal
, Это не может быть чертой по внутренним причинам. Следующая простая реализация:
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 суперкласса.
Ответы наследования Scala от класса Java: выберите, какой суперпроектор вызывать, и как в Scala подклассифицировать класс Java с несколькими конструкторами? предложите использовать черты или первичный конструктор, который делегирован вспомогательными конструкторами, но ни один из этих вариантов не подходит для моего сценария, так как мне нужно быть доступным из кода Java, который может вызывать такие вещи, как:
new HugeDecimal("12.34")
new HugeDecimal(1234)
У меня есть какое-либо решение, или мне нужно реализовать этот класс в Java?
1 ответ
Вы не можете наследовать конструкторы. Не имеет значения, реализуете ли вы его в java или в scala, если вы хотите иметь несколько конструкторов, вам придется реализовать каждый из них.