0
Java代碼重載方法值的toString替代品
String method1(Object obj) {
if (obj == null) {
return "null";
} else if (obj instanceof MyClass123[]) {
return method2(ob)).toString();
} else if (obj instanceof int[]) {
return Arrays.toString((int[]) obj);
} else if // and so for double, float, boolean, long, short...
} else if (obj instanceof Object[]) {
return Arrays.deepToString((Object[]) obj);
} else {
return obj.toString();
}
}
我試圖做同樣的斯卡拉
def method1(obj: Any): String = obj match {
case null => "null"
case x: Array[MyClass123] => method2(x).toString
case x: Array[AnyRef] => Arrays.deepToString(x)
case x: Array[_] => Arrays.toString(x)
}
最後一行導致的
overloaded method value toString with alternatives:
[error] (Array[java.lang.Object])java.lang.String <and>
[error] (Array[Double])java.lang.String <and>
[error] (Array[Float])java.lang.String <and>
[error] (Array[Boolean])java.lang.String <and>
[error] (Array[Byte])java.lang.String <and>
[error] (Array[Char])java.lang.String <and>
[error] (Array[Short])java.lang.String <and>
[error] (Array[Int])java.lang.String <and>
[error] (Array[Long])java.lang.String
[error] cannot be applied to (Array[_])
[error] case x: Array[_] => Arrays.toString(x)
這是該Java代碼完全等同?在Java中,分別涉及參考和基元類型的deepToString和toString。 –
與Java代碼不完全遞歸相似,所以我編輯了代碼以反映這一點。 – selig
現在你的代碼中有兩個錯誤:一個 - 它更不準確,第二個 - 它不能編譯。 –