当前位置: 首页 > 面试题库 >

如何使用Scala执行instanceof检查(测试)

宗烨赫
2023-03-14
问题内容

我正在尝试将ScalaTest合并到我的Java项目中。用ScalaTests替换所有JUnit测试。一方面,我想检查Guice的Injector是否注入正确的类型。在Java中,我有这样的测试:

public class InjectorBehaviour {
    @Test
    public void shouldInjectCorrectTypes() {
        Injector injector = Guice.createInjector(new ModuleImpl());
        House house = injector.getInstance(House.class);

        assertTrue(house.door() instanceof WoodenDoor);
        assertTrue(house.window() instanceof BambooWindow);
        assertTrue(house.roof() instanceof SlateRoof);
    }
}

但是我在使用ScalaTest做同样的问题:

class InjectorSpec extends Spec {
    describe("An injector") {
        it("should inject the correct types") {
            val injector = Guice.createInjector(new ModuleImpl)
            val house = injector.getInstance(classOf[House])

            assert(house.door instanceof WoodenDoor)
            assert(house.window instanceof BambooWindow)
            assert(house.roof instanceof SlateRoof)
        }
    }
}

它抱怨说,价值instanceof是不是成员Door/ Window/
Roof。我不能instanceof在Scala中使用这种方式吗?


问题答案:

Scala不是Java。Scala只是没有运算符,instanceof而是有一个称为的参数方法isInstanceOf[Type]

您可能还喜欢观看ScalaTest速成课程。



 类似资料:
  • instanceof 操作符用于检查一个对象是否属于某个特定的 class。同时,它还考虑了继承。 在许多情况下,可能都需要进行此类检查。例如,它可以被用来构建一个 多态性(polymorphic) 的函数,该函数根据参数的类型对参数进行不同的处理。 instanceof 操作符 语法: obj instanceof Class 如果 obj 隶属于 Class 类(或 Class 类的衍生类),

  • 在kotlin类中,我将方法参数作为类类型T的对象(请参见此处的kotlin文档)。当我调用方法时,我将传递不同的类作为对象。在Java中,我们可以使用对象的来比较类是哪个类。 所以我想在运行时检查和比较它是哪个类? 如何在Kotlin中检查类?

  • 问题内容: 如下代码: 原因: 无法对参数化类型执行检查。请改用表格,因为其他通用类型信息将在运行时删除 有人可以解释一下“进一步的通用类型信息将在运行时删除”的含义,以及如何解决此问题吗? 问题答案: 这意味着,如果您有任何已参数化的内容,例如,泛型信息将在运行时删除。相反,这是JVM将看到的内容。 这称为类型擦除。在运行时,JVM没有参数化的类型信息(在示例中)。 解决吗?由于JVM在运行时没

  • 问题内容: 我有以下表达: …其中元素类型为: 是否可以在过滤器之前检查类型? 问题答案: 您可以应用另一个以仅保留实例,并添加一个将为您节省以后的转换: 或者,正如Holger所说,如果您喜欢那种样式,可以用方法引用替换lambda表达式:

  • 问题内容: 我班上有一个接口类型。 我有的几个具体实现。我想提供一种遍历列表的方法,并根据具体类型执行一些逻辑。 我目前正在这样做,就像这样: 这是唯一/最佳方法吗? 问题答案: 逻辑是否合理地属于自身?如果是这样,请将其放入接口中,并为实现该接口的每个具体类适当地实现它。显然,这是一种 不错的 多态方法。 不幸的是,在现实生活中,OO并非总是那么简单-有时将按类型的行为放在类型本身中是没有意义的

  • 我使用Spring执行器和Spring靴来检查我的服务的健康。我使用OpenJDK11。并使用: Spring-boot依赖关系: 执行器依赖性: