【问题标题】:Prevent usage of existing method in Scala防止在 Scala 中使用现有方法
【发布时间】:2018-05-11 09:31:25
【问题描述】:

我可以在编译时阻止从现有 Java/Scala 类调用选定的方法吗?所以试图调用禁止方法的代码将无法编译。

我有一个使用以下方法的现有 Scala 类(来自外部库)

def saveToDb[A](a: A)

但不幸的是,当 a 无法保存到数据库时,它会引发异常。由于我想在编译时检测到这种情况,我可以写

def safeSaveToDb[A: CanBeSavedToDb](a: A)

其中类型类实例保证a可以保存到数据库并且不抛出异常。现在可以防止使用saveToDb

【问题讨论】:

  • 尝试制作class A成员transient
  • 如果你使用 Maven 作为构建工具,那么你可以使用pmd 来设置使用规则。
  • @SarveshKumarSingh 如果我在 Scala 中找不到任何解决方案,也许这就是要走的路

标签: scala


【解决方案1】:

如果我理解正确,你需要有一个接口来绑定你的多态函数类型。

例如

   trait CanBeSaved {
      def toDataToBeSaved: String //this is just an example
   }

   //then your bounds like so

   final def saveToDb[A <: CanBeSaved](a: A): Future[Unit] = save(a)

   def save(json: String): Future[Unit]

这将确保在编译时只保存扩展 CanBeSaved 的对象。

希望对你有帮助,
里斯

【讨论】:

  • 是的,我可以这样做,但外部库中仍有一个不安全的函数不支持CanBeSaved,我想以某种方式隐藏这个函数,这样我和其他程序员就不会意外使用它。
  • 最终确定 :)
  • 另外,如果边界不符合,你不能覆盖它。否则它实际上不会被覆盖
  • 问题是saveToDb来自外部库,我无法修改。刚刚写了一个更安全的函数safeSaveToDb,想防止使用原来的unsafe函数。
  • 扩展课程?
猜你喜欢
  • 2014-01-26
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2017-12-02
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多