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

Scala隐式转换问题

发布时间:2020-12-16 09:08:28 所属栏目:安全 来源:网络整理
导读:我正在努力解决 Scala隐式转换问题.以下代码段说明了我的问题: import org.junit.{ Test,Before,After };class ImplicitsTest { implicit def toStringWrapper(str: String) = new StringWrapper(str); @Test def test(){ val res1: Predicate = "str" star
我正在努力解决 Scala隐式转换问题.以下代码段说明了我的问题:

import org.junit.{ Test,Before,After };

class ImplicitsTest {

    implicit def toStringWrapper(str: String) = new StringWrapper(str);

    @Test
    def test(){
        val res1: Predicate = "str" startsWith "other";
    }

}

class StringWrapper(str: String){

    def startsWith(other: String): Predicate = null;

}

trait Predicate

如何通过隐式转换toStringWrapper强制String文字“str”转换为startsWith返回Predicate而不是Boolean?

代码示例无法编译.我知道String已经有一个startsWith方法,我只想使用另一个方法,我认为使用隐式转换可能是一种方法.

解决方法

Scala谢天谢地不会让你在没有注意到的情况下偷偷替换替换方法 – 如果你在一个类上调用一个方法,并且该类有这个方法,那就是你得到的方法调用.否则可能会引起各种混乱.

这给你留下了另外两个选择:
(1)重命名方法
(2)添加特定方法进行转换.

第二种方法的工作原理如下:您定义了一个类,它既包含您想要的方法,又包含一个返回自身的唯一命名方法,如果您希望能够使用自定义,则可以选择从该类隐式转换回字符串像原始字符串一样的项目(好像它有扩展字符串):

object ImplicitExample {
  class CustomString(s: String) {
    def original = s
    def custom = this
    def startsWith(other: String): Int = if (s.startsWith(other)) 1 else 0
  }
  implicit def string_to_custom(s: String) = new CustomString(s)
  implicit def custom_to_string(c: CustomString) = c.original

  def test = {
    println("This".custom.startsWith("Thi"))
    println("This".custom.length())
  }
}

scala> ImplicitExample.test
1
4

scala>

(编辑:李大同)

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

    推荐文章
      热点阅读