Scala で変数の型を見つける

Suraj P 2023年6月21日
  1. Scala でパターン マッチングを使用する
  2. Scala で getClass メソッドを使用する
  3. Scala で Manifest を使用する
Scala で変数の型を見つける

この記事では、Scala で変数の型を見つける方法を説明します。 実行時に Scala で変数の型を取得するさまざまな方法を見てみましょう。

Scala でパターン マッチングを使用する

変数の型は常に Scala に存在し、パラメーターとして渡すことができます。

例:

def fun[T](data : T) = data

val x = 10
fun(x)

上記の例では、Tx の型である int であることがわかります。 しかし、実行時に intstringdouble などの変数の型を取得するには、上記のコードを変更できます。

コード例:

object MyClass {
    def fun[T](data:T)= data match{
        case _:Int => "Int"
        case _:Double => "Double"
        case _:String => "String"
        case _ => "Undefined"

    }
    def main(args: Array[String]) {

     val x = 5.6
     val y = "hero"
     val z = 234

     println(fun(x))
     println(fun(y))
     println(fun(z))


    }
}

出力:

Double
String
Int

Scala で getClass メソッドを使用する

Scala の getClass メソッドは、Scala オブジェクトのクラスを取得するために使用されます。 このメソッドを使用して、変数の型を取得できます。

コード例 1:

object MyClass {

    def main(args: Array[String])
    {
    val x = 123;

    System.out.println(x.getClass)

    val y = "hero"

    System.out.println(y.getClass)

    val z = 34.56

    System.out.println(z.getClass)

    }
}

出力:

int
class java.lang.String
double

上記の出力は、文字列に関しては java.lang.String を出力することを示しています。これは、Scala 文字列は java.lang.Stringwrapper にすぎないためです。

したがって、java.lang.String の代わりに、より意味のある出力を持つ String が必要な場合は、getSimpleNamegetClass メソッドを使用できます。

コード例 2:

object MyClass {

    def main(args: Array[String])
    {

    val y = "hero"

    System.out.println(y.getClass.getSimpleName)


    }
}

出力:

String

Scala で Manifest を使用する

Manifest は Scala の機能です。 ランタイム コンパイラでこれを使用すると、generic 型情報を取得できます。 Scala では、型パラメーターを使用してインスタンスを作成できます。たとえば、def fun[T](data:T)= dataです。 ここで、T は型パラメーターです。

したがって、型 Manifest[T] のオブジェクトを作成することで、型 T に関する完全な情報を取得できます。

コード例:

object MyClass {

def myFunc[T: Manifest](t: T): Manifest[T] = manifest[T]

    def main(args: Array[String])
    {

    val y =123

    println(myFunc(y))


    }
}

出力:

Int

Manifest を使用する主な利点の 1つは、変数が ListSequence などであるかどうかなど、非プリミティブ型の型を見つけることです。

コード例 2:

object MyClass {

def myFunc[T: Manifest](t: T): Manifest[T] = manifest[T]

    def main(args: Array[String])
    {

    val y = List(1,2,3,4)

    val z = Seq("apple","mango")

    println(myFunc(y))

    println(myFunc(z))


    }
}

出力:

scala.collection.immutable.List[Int]
scala.collection.immutable.Seq[java.lang.String]
著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub