Scala隐式转换类遇到的问题
来源:互联网 发布:网络老虎机揭秘 编辑:程序博客网 时间:2024/05/01 09:48
今天练习Scala的隐式转换类遇到的一个问题,测试代码如下:
object ImplcitTest { def main(args: Array[String]) { import Context._ val person1 = User("zhangsan") println(person1.getStr()) val filePath = Thread.currentThread.getContextClassLoader.getResource("test.txt").getPath println(filePath) val readStr = new File(filePath).read() println(readStr) }}class RichFile(val file: File) { def read(): String = Source.fromFile(file).mkString}object Context { implicit def file2String(f: File) = new RichFile(f) implicit def user2Person(str: User) = new Person(str.name, 21)}case class User(val name:String)class Person(val name: String, val age: Int) { def getStr(): String = this.toString}
抛出了下面的异常:
Error:(13, 34) value getStr is not a member of com.test.scala.User
Note: implicit method user2Person is not applicable here because it comes after the application point and it lacks an explicit result type
val person1 = User("zhangsan").getStr()
^
它的意思是:隐式转换方法user2Person方法应该在隐式转换应用之前定义。
所以将代码进行了如下修改,异常解决:
class RichFile(val file: File) { def read(): String = Source.fromFile(file).mkString}object Context { implicit def file2String(f: File) = new RichFile(f) implicit def user2Person(str: User) = new Person(str.name, 21)}case class User(val name:String)class Person(val name: String, val age: Int) { def getStr(): String = this.toString}object ImplcitTest { def main(args: Array[String]) { import Context._ val person1 = User("zhangsan") println(person1.getStr()) val filePath = Thread.currentThread.getContextClassLoader.getResource("test.txt").getPath println(filePath) val readStr = new File(filePath).read() println(readStr) }}
由此得出的结论是:
1)如果隐式转换的定义和应用在同一个文件中,则隐式转换必须定义在应用点之前,并且在应用点之前需要进行导入;
2)如果不在同一个文件中,只需要在应用点之前进行导入即可;
0 0
- Scala隐式转换类遇到的问题
- intellij idea 整合scala遇到的问题
- scala-隐式转换
- scala 隐式转换
- Scala隐式转换
- Scala隐式转换
- scala隐式转换
- scala隐式转换
- scala 隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- Scala--隐式转换
- 使用scala隐式转换的例子
- scala的隐式转换之二
- Scala进阶之隐式转换作用域等问题
- scala implicit 隐式转换
- 使用 GROUP BY WITH ROLLUP 改善统计性能
- Java中”失效”的private修饰符解析(其实是一般情况下编译器绕开了)
- Dagger使用
- 微信营销之精准客户的挖掘 转载
- 解决PLSQL报错"动态执行表不可访问,本会话的自动统计被禁止"
- Scala隐式转换类遇到的问题
- jquery学习笔记
- lcd fb参数如何计算
- C++ Builder运行时单向或双向动态绑定控件的例子
- js在文本框回车触发事件的方法
- java连接数据库URL
- Codeforces Round #290 (Div. 1) 解题报告(A B)
- A. Amr and Music
- CSS中 RGB颜色查询对照表