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谢天谢地不会让你在没有注意到的情况下偷偷替换替换方法 – 如果你在一个类上调用一个方法,并且该类有这个方法,那就是你得到的方法调用.否则可能会引起各种混乱.
这给你留下了另外两个选择: 第二种方法的工作原理如下:您定义了一个类,它既包含您想要的方法,又包含一个返回自身的唯一命名方法,如果您希望能够使用自定义,则可以选择从该类隐式转换回字符串像原始字符串一样的项目(好像它有扩展字符串): 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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |