1
Scala 2.11.4
我有以下特点隐式转换功能,通过单一方法特质
trait MyTrait{
def met(msg: String): Unit
}
和类
class MyClass{
def ac(mt: MyTrait) = {
//do some job
}
}
现在,我想要调用ac
如下:
val myClass = new MyClass
myClass.as((msg: String) => println(msg)) //meaning that just print out Strings to stdout
所以,我试图添加隐式转换MyTrait
:
trait MyTrait {
def met(msgString: String): Unit
implicit def function2MyTrait(f: String => Unit): MyTrait = new MyTraitImpl(f)
private[this] class MyTraitImpl(f: String => Unit) extends MyTrait{
override def met(msgString: String): Unit = f(msgString)
}
}
,但它拒绝编译:
Error:(16, 89) type mismatch;
found : String => Unit
required: com.test.trace.MyTrait
我从Java 8来有没有办法做这样的事情在Scala呢?
其实刚刚试过了,现在编译好了。但是我之前没有遇到过“特质”的伴侣对象。它是如何共同的?它与我们在Java 8中有什么相似(接口中的静态方法)? – stella
是的,它类似于接口中的静态方法。与Java 8的不同之处在于它从一开始就存在(或者至少在很长一段时间内),所以它被更广泛地使用。就伴侣客体而言,类别和性状之间没有区别。 –
这是怎么回事:'implicit def function2MyTrait(f:String => Unit):MyTrait = new MyTrait {def met = f}'我读它的方式是创建一个扩展MyTrait的匿名类,其中的方法会见就落实了。但是编译器关于未实现的会话。 – Samar