2012-08-01 48 views
0
效果

我在一个Java接口(Constants)定义的常量如下:变化常量不承担JSP

public final static int DEFAULT_VAL = 2; 

这是在几个JSP的使用在我的代码为:

if (sample.hasModule(Constants.DEFAULT_VAL){ 
    // some code 
} 

然而,当我最近改变了常量的类型从intlong,我是在JSP调用它得到一个noSuchMethodError,因为在JSP中Constants.DEFAULT_VAL仍返回int和不长。

我也改变了所有的方法,如hasModuleint作为参数long

在java中有常量的特殊处理吗?

谢谢!

+0

我该怎么做? – 2012-08-01 11:13:20

+1

点击你的用户名。您将看到该配置文件。点击“问题”列表,然后你会在所有答案的下箭头下方看到一个白色的选中标志。首先查看所有答案,然后标记可以解决问题的最佳答案。检查标志将变成绿色标志。如果没有答案可以解决你的问题,让它白色。 – reporter 2012-08-01 11:19:25

+0

好的。完成。非常感谢! – 2012-08-01 11:21:08

回答

0

因为您只发布了一条线我可以猜测。

JSP文件 - 随着应用程序的停留 - 使用Java执行。 Java允许你覆盖方法。

假设您的特定类中的方法具有方法'hasModule(int numer)'。如果您将int值传递给该方法,则没有任何问题。如果您向该方法传递一个较长的值,那么编译器或JVM会查找名称为“hasModule()”的方法,该方法的参数签名值为long值。 Java没有找到那个方法,你的错误信息是它的一个结果。

+0

Hi记者, 当我将Constants.DEFAULT_VAL从int更改为long时,我也将hasModule()方法从hasModule(int num)更改为hasModule(long num)。我的JSP相应地看到它,即它现在看到hasModule(long)。我的问题是我的常量返回的问题。它现在应该返回一个long(Constants.DEFAULT_VAL),但在jsp中,调用Constants.DEFAULT_VAL仍然返回int。 – 2012-08-01 11:54:29

+0

我想你错过了我:-) Java中的覆盖有不同的含义。尝试以下方法:hasModule(int param){//用int值做一些事情}和hasModule(long参数){//做一些长值的事情}。你可以把它们放到同一个班上。 – reporter 2012-08-01 11:58:22