让我们有一个带有内部类的A类。
class A {
class InnerA
}
包含A
实例的类Testclass Test(inst: A) {
def someFun(p: inst.InnerA) {} //Neither A#InnerA, Nor inst.type#InnerA
}
现在我需要限制someFun只能使用指定inst的InnerA类型的参数(Test成员)来调用。 (不是通过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,actual:a.InnerA”
请建议如何完成。
类似但不合适解决方案的形式为
def fun(a: A)(p: a.InnerA) {}
至于应用程序:A类是Enumeration类,InnerA是Enumeration.Value类。而Test是一个我想限制只使用指定的Enumeration的类。 “inna”是在Enumeration子类中构造的枚举值的实例。
答案 0 :(得分:1)
使用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)