1. 序章

このクイックチュートリアルでは、Groovyでデータ型を見つけるためのさまざまな方法を探ります。

実際、それは私たちがしていることによって異なります:

  • まず、プリミティブをどうするかを見ていきます
  • 次に、コレクションがどのようにいくつかのユニークな課題をもたらすかを見ていきます
  • そして最後に、オブジェクトとクラス変数を見ていきます

2. プリミティブタイプ

Groovy は、Javaと同じ数のプリミティブ型をサポートします。 プリミティブのデータ型は3つの方法で見つけることができます

まず、人の年齢を複数表現していると想像してみましょう。

まず、演算子のインスタンスから始めましょう。

@Test
public void givenWhenParameterTypeIsInteger_thenReturnTrue() {
    Person personObj = new Person(10)
    Assert.assertTrue(personObj.ageAsInt instanceof Integer);
}

instanceof は、オブジェクトが特定のタイプのインスタンスであるかどうかを確認するために使用できる二項演算子です。 オブジェクトがその特定のタイプのインスタンスである場合はtrueを返し、それ以外の場合はfalseを返します。

また、 Groovy 3は、新しい!instanceof演算子を追加します。 オブジェクトが型のインスタンスでない場合はtrueを返し、そうでない場合はfalseを返します。

次に、Objectクラスの getClass()メソッドを使用することもできます。 インスタンスのランタイムクラスを返します。

@Test
public void givenWhenParameterTypeIsDouble_thenReturnTrue() {
    Person personObj = new Person(10.0)
    Assert.assertTrue((personObj.ageAsDouble).getClass() == Double)
}

最後に、。 class 演算子を適用して、データ型を見つけましょう。

@Test
public void givenWhenParameterTypeIsString_thenReturnTrue() {
    Person personObj = new Person("10 years")
    Assert.assertTrue(personObj.ageAsString.class == String)
}

同様に、任意のプリミティブ型のデータ型を見つけることができます。

3. コレクション

Groovyは、さまざまなコレクションタイプのサポートを提供します。

Groovyで簡単なリストを定義しましょう。

@Test
public void givenGroovyList_WhenFindClassName_thenReturnTrue() {
    def ageList = ['ageAsString','ageAsDouble', 10]
    Assert.assertTrue(ageList.class == ArrayList)
    Assert.assertTrue(ageList.getClass() == ArrayList)
}

ただし、マップでは、.class演算子は適用できません。

@Test
public void givenGrooyMap_WhenFindClassName_thenReturnTrue() {
    def ageMap = [ageAsString: '10 years', ageAsDouble: 10.0]
    Assert.assertFalse(ageMap.class == LinkedHashMap)
}

上記のコードスニペットでは、ageMap.classは指定されたマップからキークラスの値を取得しようとします。 マップの場合、.class よりもgetClass()を適用することをお勧めします。

4. オブジェクトとクラス変数

上記のセクションでは、さまざまな戦略を使用して、プリミティブとコレクションのデータ型を見つけました。

クラス変数がどのように機能するかを確認するために、クラスPersonがあるとします。

@Test
public void givenClassName_WhenParameterIsInteger_thenReturnTrue() {
    Assert.assertTrue(Person.class.getDeclaredField('ageAsInt').type == int.class)
}

getDeclaredField()は、特定のクラスのすべてのフィールドを返すことに注意してください。

instanceof、getClass()、および .class 演算子を使用して、任意のオブジェクトのタイプを見つけることができます。

@Test
public void givenWhenObjectIsInstanceOfType_thenReturnTrue() {
    Person personObj = new Person()
    Assert.assertTrue(personObj instanceof Person)
}

さらに、Groovyメンバーシップ演算子inを使用することもできます。

@Test
public void givenWhenInstanceIsOfSubtype_thenReturnTrue() {
    Student studentObj = new Student()
    Assert.assertTrue(studentObj in Person)
}

5. 結論

この短い記事では、Groovyでデータ型を見つける方法を見ました。 比較すると、 getClass()メソッドは.class演算子よりも安全です。 また、オペレーターのの動作と、オペレーターのインスタンスについても説明しました。 さらに、クラスのすべてのフィールドを取得し、.type演算子を適用する方法を学びました。

いつものように、すべてのコードスニペットはGitHubにあります。