Java Tapestry中的不同类之间的静态,非静态和调用

时间:2013-10-05 18:03:08

标签: java static tapestry non-static

在我的Java Tapestry应用程序中,我有一个名为NachrichtenBubble.java的类,它测试是否有任何要发布的消息,以及是否应显示特定元素。它看起来像这样:

public boolean ShowBubble() {
    int n = getHowManyNachrichten();
    if (n == 0) {
        return false;
    }
    return true;
}

现在,在我的应用程序的不同位置,我想确定是根据有多少消息显示或隐藏元素。由于这已经在NachrichtenBubble.ShowBubble()中完成,我希望能够从我的单独类中调用ShowBubble()(让我们称之为OtherClass.java)并对结果进行操作。

如果我把它放到我的OtherClass.java中,我得到一个“无法对NachrichtenBubble类型的非静态方法ShowBubble()进行静态引用”错误:

public boolean ShowNachrichten() {
    boolean m = NachrichtenBubble.ShowBubble();
    return m;
}

我已经在这里阅读了其他静态/非静态方法问题的答案,这些问题一直很有教育意义,但我无法将它们成功应用于此问题。我试图在NachrichtenBubble.java中创建一个新的Context方法,并从OtherClass.java调用它,但它不起作用。

我是否应该继续尝试基于上下文的解决方案,或者是否有其他方法可以尝试从NachrichtenBubble.ShowBubble()获取可用的结果到OtherClass.ShowNachrichten()?

2 个答案:

答案 0 :(得分:0)

您对NachrichtenBubble的调用是静态的,换句话说,您没有该类的实例。 ShowBubble方法虽然是实例方法。您可以将ShowBubble方法更改为静态,但前提是它调用的方法(getHowManyNachrichten())也可以是静态的,并且不使用任何实例字段,考虑到名称,这似乎不太可能。

换句话说,如果没有特定的NachrichtenBubble,你(可能)不知道有多少Nachrichten,所以你不能要求提供这些信息。

或者,您可以让您的OtherClass知道NachrichtenBubble的这个实例。

另一方面,我可能不会重复使用这样的方法。特别是因为您可以用getHowManyNachrichten() > 0

替换整个方法

答案 1 :(得分:0)

这与Tapestry完全无关,而是一个纯Java和面向对象编程问题。您可以将ShowBubble()和getHowManyNachrichten()更改为静态方法,或者更好的是,在ShowNarichten中,创建名为narichtenBubble的NarichtenBubble字段并调用narichtenBubble.showBubble()。顺便说一下,你的方法名称超出了Java惯例,因此很难阅读和解决它。