【发布时间】:2013-03-21 14:32:28
【问题描述】:
如果存在现有的 Java 类 pkg.Test,
package pkg;
public class Test {
public int v;
public Test(int v) { this.v = v; }
}
试图通过定义一个 scala 伴随对象来创建一个提取器
package pkg
object Test{
def unapply(t : Test) : Option[Int] = Some(t.v)
}
产生错误“测试已定义为对象测试”。 但是,如果我在新包中为 java 类创建同义词,一切似乎都正常
package pkg
package object matchers {
type Test = pkg.Test
}
并在新包中定义对应的对象
package pkg.matchers
object Test {
def unapply(t : Test) : Option[Int] = Some(t.v)
}
现在模式和原始类的所有成员都可以从新包中获得
import pkg.matchers._
object main {
def main(args : Array[String]) {
val t = new Test(1)
t match {case Test(v) => println(v)}
println(t.v)
}
}
添加一个类型同义词让这个工作看起来很奇怪。除了必须使用新包之外,以这种方式添加模式匹配是否有任何问题?有什么办法可以使提取器在原始包中可用?
【问题讨论】: