【问题标题】:Play framework (2.3.5) - Template accessing an inner class failsPlay framework (2.3.5) - 访问内部类的模板失败
【发布时间】:2015-03-02 21:53:39
【问题描述】:

我有一个这样定义的类(伪代码):

package com.some.namespace

public class SomeClass {

    protected SomeClass() {}

    // stuff...

    public class SomeInnerClass {

        public SomeInnerClass() {}

        // more stuff (accesses instance variables from SomeClass)...

    }

}

然后在我的模板中,我使用可重用块定义如下:

@doSomething(val: com.some.namespace.SomeClass.SomeInnerClass) = {

    // even more stuff...

}

但我得到了错误:

类型 SomeInnerClass 不是对象的成员 com.some.namespace.SomeClass

我无法访问模板中的内部类还是应该可以工作? (如果它应该工作,我可能需要发布我的实际代码)

【问题讨论】:

  • 你的内部类不需要是静态的吗?如果是,它应该像任何其他类一样工作。
  • 我不这么认为,SomeClass 是我在视图中访问的一个单例,它有一个 SomeInnerClass 类的列表,我通过 getter 获得并传递给内部的可重用块一个 for 循环。事实上,如果我将内部类设为静态,它将破坏我的代码,因为 SomeClass 必须是一个实例,因此 SomeInnerClass 不需要(或不想)是静态的,因为它从 SomeClass 访问实例变量上课,不是吗?
  • 感谢您的编辑@Mikesname 我完全错过了。

标签: playframework playframework-2.3


【解决方案1】:

它应该可以工作,但是因为SomeInnerClass是一个依赖类型,即依赖于你的单例外部类实例,你需要这样写:

@doSomething(value: com.some.namespace.SomeClass#SomeInnerClass) = {
    // even more stuff...
}

Scala 中的SomeClass#SomeInnerClass 语法模糊地表示SomeInnerClass 来自SomeClass 的任何实例。详情请参阅this answer

如果内部类是static,那么您当前的SomeClass.SomeInnerClass 语法将是可行的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2012-06-24
    相关资源
    最近更新 更多