从方法返回泛型类型的实例

2024-01-07

我想要一个方法getInstance它接受一个字符串值并返回一个对象实例,在方法签名中定义为泛型

  def getInstance[T](dataStr: String): Option[T] = {
      T match {
        case typeOf[String] => Some(dataStr)             // if type of T is String 
        case typeOf[Integer] => Some(dataStr.toInt)      // if type of T is Integer
        case typeOf[Boolean] => Some(dataStr.toBoolean)  // if type of T is Boolean
        case _ => throw new NoSuchElementException()
      }
  }

我怎样才能在 Scala 中写出同样的内容?

斯卡拉版本:2.11


类型类可能是最好的解决方案。

trait FromString[T] {
  def apply(s: String): T
}

object FromString {
  implicit object IntString extends FromString[Int] {
    def apply(s: String) = s.toInt
  }
  implicit object DoubleString extends FromString[Double] {
    def apply(s: String) = s.toDouble
  }
  implicit object BooleanString extends FromString[Boolean] {
    def apply(s: String) = s.toBoolean
  }
}

def getInstance[T](dataStr: String)(implicit from: FromString[T]): Option[T] =
  Some(from(dataStr))

val a = getInstance[Int]("1")
val b = getInstance[Double]("1.0")
val c = getInstance[Boolean]("true")

这将为编译时检查有效类型getInstance并将返回适当的Option type.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从方法返回泛型类型的实例 的相关文章

随机推荐

  • 添加这个按钮是什么

    How can i add what s this button besides close button i have seen lot of threads where they want to remove it but not a
  • ViewPager 中区分用户滚动和程序化页面更改

    我有一个android support v4 view ViewPager在我的应用程序中 我想区分以编程方式启动的平滑滚动和用户启动的触摸滚动 我看过ViewPager OnPageChangeListener我相信答案可能就在那里 但我
  • 在 PHP 中上传图像时去除元数据

    我认识的某个网站最近将其带宽从每月 2 5 TB 升级到 3 5 TB 原因是他们最近超过了 2 5 限制 他们抱怨不知道如何降低带宽使用量 我没有看到他们考虑的一件事是 网站上显示的 JPEG 和其他图像 这是一个图像较多的网站 可以包含
  • 使用 python 的 optparse 时在帮助消息中显示换行符

    我正在使用 optparse 模块进行选项 参数解析 出于向后兼容性的原因 我无法使用 argparse 模块 如何格式化我的 Epilog 消息以便保留换行符 在下面的示例中 我希望按格式打印尾声 epi Examples usages
  • BorderColor 在 Android 上不选择 LinearGradient 颜色

    我试图创建一个圆圈 里面有一个图像 它的边框是彩色的 这就是我使用 LinearGradient 的原因 我正在使用这个指南 https codeburst io linear gradient for border color in re
  • 处理功能按键

    I have a C form with 5 buttons The users enters the information and depending on the press of a function key a specific
  • 数组内的自增运算符

    我有一个 C 程序 它使用数组执行队列操作 在该程序中 他们增加了数组内的变量 我不明白这是如何运作的 那么 请解释一下这些操作 array i array i 请解释一下这些操作 array i 第一次增量i 然后为您提供递增索引处的元素
  • C#:: 何时使用事件或从事件处理接口派生的对象集合?

    我有一个我认为是一个简单的 问题 我已经找到了几个解决方案 但我不确定该走哪条路以及 C 中的最佳实践 我有一个主对象 比如单例 在应用程序的生命周期内实例化一次 这个 MasterClass 创建了一堆新类型的对象 每次调用 Master
  • 创建带有前导零的数字序列[重复]

    这个问题在这里已经有答案了 这个问题之前已经使用 Console writelines 函数解决过 但这在我的 R 版本中不可用 而且我找不到它属于哪个包 我只是想以 xxx 格式创建一个从 0 99 到前导零的数字序列 所以我的数字应该是
  • 如何将 MongoDB 对象提取到 pandas Dataframe?

    我想从 MongoDB 集合中仅提取一个我需要的对象 有一个关于 manuelActivityInfo 对象的示例 x list coll find activities manuelActivityInfo exists True act
  • maxRequestPathLength 不在 ASP.NET 4 文档中并且不起作用

    如果我尝试在 ASP NET 应用程序中使用新的 maxRequestPathLength 设置 它将不起作用 我收到无法识别的属性错误 我尝试过在 IIS 7 中使用 ASP NET Integrated 和 Classic 应用程序池
  • 服务器端的客户端证书验证,DEPTH_ZERO_SELF_SIGNED_CERT 错误

    我正在使用节点 0 10 26 并尝试通过客户端验证建立 https 连接 服务器的代码 var https require https var fs require fs process env NODE TLS REJECT UNAUT
  • R闪亮:彩色文件输入按钮和进度条

    有没有办法上色fileInputR 中的按钮闪亮吗 看起来这是可能的 如此处所示page https github com rstudio shiny pull 602在 github 上 但是我找不到完成此操作的代码 这是一个简单的应用程
  • 尝试在新解决方案中启用 NuGet Package Restore 时出错

    尝试在我刚刚创建的新解决方案中启用包还原时出现错误 VS2012中的错误是 NuGet 包管理器 配置解决方案以还原 NuGet 时出错 构建中的包 无法从路径 NuGet Build 2 7 0 npkg 读取包 我尝试在 VS2010
  • 从日期/时间字符串获取时间

    我有一个日期值存储在变量中 我需要将值的时间部分提取到一个单独的变量中 然后从中添加 减去时间 日期变量使用 date YmdHis 设置 例如 20110805124000 表示 2011 年 8 月 5 日 12 40 00 从值 20
  • PInvoke - 从指针编组结构数组

    我正在尝试遵循以下答案这个问题 https stackoverflow com a 2403083 27494 我的结构在 C 中看起来像这样 typedef struct drive info t unsigned char drive
  • 将 Apache Cordova/PhoneGap 与 Android 2.x 结合使用

    似乎不可能为 Android 2 x 创建 PhoneGap 应用程序 是对的吗 要使用phonegap运行Android应用程序 请将您的应用程序构建为Android 4 0 3 并将最低版本设置为您想要的较低版本 基本上 Android
  • cPanel cron 作业,未指定输入文件?

    我刚刚设置了我的第一个 cron jon 来每晚运行一个股票脚本 手动运行它效果很好 它存储在 admin stock update php中 我正在运行的命令是 usr bin php q admin stock update php 但
  • 如何对类的单个枚举进行 Javadoc

    我正在为一个包含自己的枚举的类编写 Javadoc 有没有办法为各个枚举生成 Javadoc 例如 现在我有这样的事情 This documents HairColor private static enum HairColor BLACK
  • 从方法返回泛型类型的实例

    我想要一个方法getInstance它接受一个字符串值并返回一个对象实例 在方法签名中定义为泛型 def getInstance T dataStr String Option T T match case typeOf String gt