次のコードはエラーを出します:
package test
trait Base {
def method:String
}
trait Trait extends Base {
def method()(implicit i:String):String = { "2" }
}
object Object extends Trait {
}
エラーは「タイプ=>文字列のクラスBaseのメソッドメソッドが定義されていないため、オブジェクトの作成が不可能です」です。
上記のエラーは次のコードで修正されています
package test
trait Base {
def method:String
}
trait Trait extends Base {
def method:String = method()("String") // Over loading
def method()(implicit i:String):String = { "2" }
}
object Object extends Trait {
}
ここで、Scalaクラスの代わりに、Javaインターフェイスを次のように定義すると次のようになります。
// Java Code
package test;
public interface JBase {
String method();
}
// Scala Code
package test
trait Trait extends JBase {
def method:String = method()("10")
def method()(implicit i:String):String = { "2" }
}
object Object extends Trait {
}
「オーバーロードされた定義へのあいまいな参照、タイプ()(implicit i:String)Stringの特性特性のメソッドメソッドとタイプ()Stringの特性特性のメソッドメソッドの両方が引数types()に一致します」というエラーが表示されます。
コンパイラの動作が異なるこれら両方のシナリオの違いは何ですか?この問題を解決するにはどうすればよいですか?