让我们有一个带有内部类的 A 类。
class A {
class InnerA
}
和持有 A 实例的类 Test
class Test(inst: A) {
def someFun(p: inst.InnerA) {} //Neither A#InnerA, Nor inst.type#InnerA
}
现在我需要限制仅使用指定 inst 的 InnerA 类型的参数调用 someFun(测试成员)。 (不是通过 A#InnerA 实现的任何 InnerA 实例)
val a: A = new A
val inna: a.InnerA = new a.InnerA
val test: Test = new Test(a)
但是当我写这段代码时:
test.someFun(inna)
类型检查器警告“类型不匹配,预期:inst.type#InnerA,实际:a.InnerA”
请建议如何做到这一点。
类似但不适合的解决方案形式为
def fun(a: A)(p: a.InnerA) {}
应用方面:A类是Enumeration类,InnerA是Enumeration.Value类。 Test 是我想限制只与指定的枚举一起使用的类。 “inna”是在枚举子类中构造的枚举值的实例。
最佳答案
使用new Test(a)
,您将丢失a
变为test.inst
的信息。例如以下作品:
class Test(val inst: A) {
def someFun(p: inst.InnerA) = ()
}
val test: Test = new Test(new A)
val inna = new test.inst.InnerA
test.someFun(inna)
关于Scala:仅使用指定的路径相关类型参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536202/