は、私の知る限り理解し、ScalaではScalaの文字列型推論は
String
is an alias forjava.lang.String
としてはを説明し、Predef.scalaで見ることができます。
type String = java.lang.String
だから、本質的に、それらが同じです。
しかし、のIntelliJ IDEA 2017年2月5日に、以下のコードは、エラー生成します。ここでは
trait PerceptualHash {
def calc[A](bi: BufferedImage): A
}
sealed trait BinaryStringPerceptualHash extends PerceptualHash {
override def calc[String](bi: BufferedImage): String
}
private object GeneralBinaryStringPerceptualHash extends BinaryStringPerceptualHash {
def calc[String](bi: BufferedImage): String = "0"
}
を、"0"
が予想タイプに準拠しないjava.lang.String型の発現"のメッセージで下線が引かれます文字列 "。
しかし、私はそうのような"0"
を変更した場合:
def calc[String](bi: BufferedImage): String = new String("0")
その後、私はそのようなエラーメッセージが表示されますありません。
何が起こっているのですか?それは期待された動作ですか(もしそうならば)、私は何か間違っているのでしょうか、それともIntellij IDEAの型推論バグですか?
本当にありがとうございます。そして、 'BinaryStringPerceptualHash'の' calc'を無効にすることについてのあなたのコメントは私の心を吹き飛ばします:-)これは型パラメータ化の力です。 – parazs
'BinaryStringPerceptualHash'は、1)共有コードを持っていないか、2)PerceptualHashが' BinaryStringPerceptualHash'かどうかをテストする必要がある場合に特に有用ではないことを付け加えたいと思います。 –
あなたは@AlexeyRomanovですが、私は 'BinaryStringPerceptualHash'を実装したままにして、それを拡張するクラス/オブジェクトを作成します。 – parazs