12

ScalaでMyAlias[A]のエイリアスとして定義することは可能ですかMyClass[String, A]?たとえば、MyAlias[Int]を参照しMap[String, Int]ます。

4

1 に答える 1

20

ではなく であるMapことに注意してください。traitclass

typeキーワードを使用してエイリアスを作成することもできます:

type StringMap[A] = Map[String, A]

val myMap: StringMap[Int] = Map("a" -> 1)

これは、、または定義のスコープ内class(objectおよびtrait任意のメソッドまたは式のスコープ内) で実行できます。

純粋に実装コードの便宜上、エイリアスをその宣言スコープに対してプライベートにしたい場合があります。タイプを一般的に使用できるようにしたい場合は、パッケージ オブジェクトが役立ちます。

package object mypackage {
  type StringMap[A] = Map[String, A]
}

Mapはクラスではなくトレイト (および関連するコンパニオン オブジェクト) であるため、インスタンスを作成するために直接使用することはできません。

val myMap = new StringMap[Int]
// error: trait Map is abstract; cannot be instantiated

ただし、クラスにエイリアスを設定した場合でも、次のnewキーワードを使用できます。

type StringHashMap[A] = HashMap[String, A]
val myMap = new StringHashMap[Int]
于 2012-05-31T08:59:36.490 に答える