1

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

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

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

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

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

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

我应该坚持尝试基于上下文的解决方案,还是可以尝试从 NachrichtenBubble.ShowBubble() 到 OtherClass.ShowNachrichten() 中获得可用的结果?

4

2 回答 2

0

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

于 2013-10-08T13:28:22.393 回答
0

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

换句话说,如果没有特定的 NachrichtenBubble,您(可能)不知道有多少 Nachrichten,因此您无法询问该信息。

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

另一方面,我可能不会重复使用这样的方法。特别是因为您可以通过以下方式替换整个方法getHowManyNachrichten() > 0

于 2013-10-05T18:19:47.813 回答