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

避免在类型开关的分支中使用类型断言

施俊远
2023-03-14
问题内容

我在Go中使用类型开关,例如以下代码:

switch question.(type) {
case interfaces.ComputedQuestion:
    handleComputedQuestion(question.(interfaces.ComputedQuestion), symbols)
case interfaces.InputQuestion:
    handleInputQuestion(question.(interfaces.InputQuestion), symbols)
}

有没有一种方法可以防止在将问题传递给另一个函数之前必须断言案件中的问题类型?


问题答案:

是的,分配类型切换的结果将为您提供断言的类型

switch question := question.(type) {
case interfaces.ComputedQuestion:
    handleComputedQuestion(question, symbols)
case interfaces.InputQuestion:
    handleInputQuestion(question, symbols)
}

http://play.golang.org/p/qy0TPhypvp



 类似资料:
  • 问题内容: 我正在编程一个通用的缓存机制,我需要在结构中设置一些属性,这些结构只知道它们的reflect.Type,属性名称和reflect.Value可以在属性中设置,但我无法避免类型断言,这使得我的代码不是通用的… 前往Playground解决问题(通过硬编码类型断言工作)… 前往Playground解决问题(不适用于未知界面) 问题答案: 最终,我找到了一种方法。请遵循下面的Go Playg

  • 问题内容: 有没有一种方法可以避免类型擦除并获得对类型参数的访问? 我需要了解并使用它来做事。是否可以,如果可以,如何在 不 将类传入构造函数或参数之外的任何地方的 情况下 完成操作? 编辑: 这个问题的主要目的是找出是否有 任何实用的方法 来消除类型擦除。 问题答案: 实际上, 没有 类型擦除的实用方法,因为您不能要求运行时无法访问的内容。当然,假设您同意为实现接口的每个枚举子类化通用类是一个实

  • 7.13. 类型开关 接口被以两种不同的方式使用。在第一个方式中,以io.Reader,io.Writer,fmt.Stringer,sort.Interface,http.Handler,和error为典型,一个接口的方法表达了实现这个接口的具体类型间的相似性,但是隐藏了代表的细节和这些具体类型本身的操作。重点在于方法上,而不是具体的类型上。 第二个方式利用一个接口值可以持有各种具体类型值的能力

  • 问题内容: 我正在使用Java 的本地实现,该实现具有如下方法: 这两种方法可以编译并正常工作: 此方法无法编译: 错误: (我已经修剪了包限定符,以使错误更易读) 我可以通过指定类型进行编译: 但是为什么我需要呢?以及如何避免此代码混乱? 问题答案: 此代码应该起作用。 它在最新的JDK 1.8.0_121上编译。 无法在JDK 1.8.0-51上编译。 这意味着它在此版本的JDK中很可能是一个

  • 问题内容: 在Go中使用类型断言/类型切换作为运行时类型发现的方法有多慢? 我听说例如在C / C ++中,在运行时发现类型会降低性能。要绕过它,通常将类型成员添加到类中,以便可以与这些类型进行比较而不是强制转换。 我在整个www上都没有找到明确的答案。 这是我要问的一个示例- 与其他类型检查方法(如上面提到的或我不知道的其他方法)相比,这是否算 快 ? 问题答案: 编写基准测试来检查它很容易:h

  • 问题内容: 使用createQuery()。list之后是否可以避免投射警告? 我希望找到一种通过通用参数或方法参数指定目标对象的方法,如下所示: 问题答案: 要记住的最重要的一点是, 警告是由于编译器引起的,而不是hibernate的 -您可以告诉编译器忽略未实现的泛型。通过使用HQL,我们以一种类型安全的方式查询数据,不幸的是,java无法进行验证。 有很多方法可以避开hibernate转换的