我正在尝试将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依赖关系: 执行器依赖性: