让我们拥有一个带有内部类的A类。
class A {
class InnerA
}
和持有A实例的Test类
class Test(inst: A) {
def someFun(p: inst.InnerA) {} //Neither A#InnerA, Nor inst.type#InnerA
}
现在,我需要限制someFun仅可使用指定inst (测试成员)的InnerA类型的参数来调用。 (不是通过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是我想限制仅用于指定的Enumeration的类。 “inna”是在Enumeration子类内部构造的枚举值的实例。
最佳答案
使用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 - Scala:仅使用指定的与路径相关的类型参数来调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22536202/