Contents

如何确定Groovy中的数据类型

1. 简介

在这个快速教程中,我们将探索在 Groovy 中查找数据类型的不同方法。

实际上,这取决于我们在做什么:

  • 首先,我们将看看如何处理原语
  • 然后,我们将看到收藏如何带来一些独特的挑战
  • 最后,我们将看看对象和类变量

2. 原始类型

Groovy 支持与 Java 相同数量的原始类型。我们可以通过三种方式找到原语的数据类型

首先,让我们假设我们有多个表示一个人的年龄。

首先,让我们从instanceof运算符开始:

@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将尝试从给定的 map 中检索键类的值对于地图,建议使用getClass() 而不是.class**。

4. 对象和类变量

在上面的部分中,我们使用了各种策略来查找基元和集合的数据类型。

要查看类变量是如何工作的,假设我们有一个类Person

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

请记住,getDeclaredField() 返回某个类的所有字段。

我们可以使用instanceofgetClass().class运算符找到任何对象的类型:

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

此外,我们还可以在中使用 Groovy 成员运算符:

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