让我们拥有一个带有内部类的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/

10-11 06:50