Vermeiden impliziter Mehrdeutigkeiten in Scala

Ich versuche, eine implizite Konvertierung von einem beliebigen Typ (z. B. Int) in einen String zu erstellen.

Eine implizite Konvertierung in String bedeutet, dass RichString-Methoden (wie Reverse) nicht verfügbar sind.

implicit def intToString(i: Int) = String.valueOf(i)
100.toCharArray  // => Array[Char] = Array(1, 0, 0)
100.reverse // => error: value reverse is not a member of Int
100.length // => 3

Eine implizite Konvertierung in RichString bedeutet, dass String-Methoden (wie toCharArray) nicht verfügbar sind

implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.reverse // => "001"
100.toCharArray  // => error: value toCharArray is not a member of Int
100.length // => 3

Die Verwendung beider impliziter Konvertierungen bedeutet, dass duplizierte Methoden (wie die Länge) nicht eindeutig sind.

implicit def intToString(i: Int) = String.valueOf(i)
implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.toCharArray  // => Array[Char] = Array(1, 0, 0)
100.reverse // => "001"
100.length // => both method intToString in object $iw of type 
   // (Int)java.lang.String and method intToRichString in object
   // $iw of type (Int)scala.runtime.RichString are possible 
   // conversion functions from Int to ?{val length: ?}

Ist es also möglich, implizit in String zu konvertieren und dennoch alle String- und RichString-Methoden zu unterstützen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage