在我的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()?
答案 0 :(得分:0)
您对NachrichtenBubble的调用是静态的,换句话说,您没有该类的实例。 ShowBubble方法虽然是实例方法。您可以将ShowBubble方法更改为静态,但前提是它调用的方法(getHowManyNachrichten())也可以是静态的,并且不使用任何实例字段,考虑到名称,这似乎不太可能。
换句话说,如果没有特定的NachrichtenBubble,你(可能)不知道有多少Nachrichten,所以你不能要求提供这些信息。
或者,您可以让您的OtherClass知道NachrichtenBubble的这个实例。
另一方面,我可能不会重复使用这样的方法。特别是因为您可以用getHowManyNachrichten() > 0
答案 1 :(得分:0)
这与Tapestry完全无关,而是一个纯Java和面向对象编程问题。您可以将ShowBubble()和getHowManyNachrichten()更改为静态方法,或者更好的是,在ShowNarichten中,创建名为narichtenBubble的NarichtenBubble字段并调用narichtenBubble.showBubble()。顺便说一下,你的方法名称超出了Java惯例,因此很难阅读和解决它。