加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何提高基于字符串或双精度值的类型安全性?

发布时间:2020-12-16 10:06:40 所属栏目:安全 来源:网络整理
导读:我想知道使用我的代码实现类型安全的最佳方法,当各种值可能都是字符串或双打时,但仍然不兼容.例如,我可能有单位为磅和千克,但我应该被禁止分配给另一个.同样地,我可能有一个人ID作为字符串和一个动物ID的查找表作为Map [String,Int],但是我应该被禁止在动物
我想知道使用我的代码实现类型安全的最佳方法,当各种值可能都是字符串或双打时,但仍然不兼容.例如,我可能有单位为磅和千克,但我应该被禁止分配给另一个.同样地,我可能有一个人ID作为字符串和一个动物ID的查找表作为Map [String,Int],但是我应该被禁止在动物表中查找一个人.

从概念上讲,我正在寻找这样的东西:

class PersonId extends String
class AnimalId extends String

var p : PersonId = "1234"
var tab : Map[AnimalId,Int] = Map("foo" -> 5,"bar" -> 6)
tab.get(p)  // Want this to cause a compile error

但是有几个问题使得它不起作用.建议适合精神的东西?

解决方法

出于显而易见的原因,您无法扩展String.我建议使用案例类:

case class PersonId(id:String)
case class AnimalId(id:String)

语法变得有点复杂,但不是那么多.在模式匹配时,您可以轻松使用案例类!

var p: PersonId = PersonId("1234")
var tab: Map[AnimalId,Int] = Map(AnimalId("foo") -> 5,AnimalId("bar") -> 6)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读