为什么 void 方法无法在 jsp 中的 scriptlet 和表达式标记内部打印
why void method cannot print inside of scriptlets and expression tags in jsp
当我尝试使用声明标记打印 return int 的方法时,通常 scriplet 和表达式标记可以打印该方法。
<%! int print(int i, int j, int k) {
return i + j + k;
}%>
<%= print(10, 20, 30)%>
<% out.print(print(10, 20, 300));%>
但是当我尝试使用相同的标签打印 void return 方法时,出现编译错误。
<%! void print(int i, int j, int k) {
System.out.print(i + j + k);
}%>
<%= print(10, 20, 30)%>
<% print(10, 20, 300);%>
..
C:\Users\dilin\Documents\NetBeansProjects\Practice\build\generated\src\org\apache\jsp\index_jsp.java:60: error: 'void' type not allowed here
out.print( print(10, 20, 30));
^1 error
这是因为 void 方法不能作为打印输出吗?
我是网络开发的新手。所以请多多包涵。谢谢。
当您编写 out.print() 时,它需要一些返回值。但是你的方法写成void。这就是为什么它给你错误
这简单明了。在您的脚本中,您正在调用不带参数的 java.io.PrintStream#print
方法。因此,编译器会报错。
参考Java docs。虽然 PrintStream
中有多个 print
方法的重载变体,但其中 none 是 no-argument 重载。您的自定义 print
方法 returns void
因此您不能将它传递给接受参数的方法。
附带说明,强烈建议不要使用 scriptlet,因为它们会使您的应用程序容易受到安全威胁。
当我尝试使用声明标记打印 return int 的方法时,通常 scriplet 和表达式标记可以打印该方法。
<%! int print(int i, int j, int k) {
return i + j + k;
}%>
<%= print(10, 20, 30)%>
<% out.print(print(10, 20, 300));%>
但是当我尝试使用相同的标签打印 void return 方法时,出现编译错误。
<%! void print(int i, int j, int k) {
System.out.print(i + j + k);
}%>
<%= print(10, 20, 30)%>
<% print(10, 20, 300);%>
..
C:\Users\dilin\Documents\NetBeansProjects\Practice\build\generated\src\org\apache\jsp\index_jsp.java:60: error: 'void' type not allowed here
out.print( print(10, 20, 30));
^1 error
这是因为 void 方法不能作为打印输出吗?
我是网络开发的新手。所以请多多包涵。谢谢。
当您编写 out.print() 时,它需要一些返回值。但是你的方法写成void。这就是为什么它给你错误
这简单明了。在您的脚本中,您正在调用不带参数的 java.io.PrintStream#print
方法。因此,编译器会报错。
参考Java docs。虽然 PrintStream
中有多个 print
方法的重载变体,但其中 none 是 no-argument 重载。您的自定义 print
方法 returns void
因此您不能将它传递给接受参数的方法。
附带说明,强烈建议不要使用 scriptlet,因为它们会使您的应用程序容易受到安全威胁。