java将变量值从一个方法传递到另一个方法
这似乎很容易,但我不知道为什么我在这方面有这么大的困难。。。因此在getURL中,我返回字符串“total”。我试图返回handleRequest方法中已经存在的相同值“total”。建议?提前谢谢
public class Multiply implements Controller {
static int product;
private static String total;
public static String getURL(HttpServletRequest req) {
String scheme = req.getScheme(); // http
String serverName = req.getServerName(); // hostname.com
int serverPort = req.getServerPort(); // 80
String contextPath = req.getContextPath(); // /mywebapp
String servletPath = req.getServletPath(); // /servlet/MyServlet
String pathInfo = req.getPathInfo(); // /a/b;c=123
String queryString = req.getQueryString(); // d=789
String[] item = queryString.split("&");
product = 1;
for (int i = 0; i < item.length; i++) {
String[] s = item[i].split("=");
String name = s[0];
String value = s[1];
int numValue = Integer.parseInt(value);
product = product * numValue;
}
total = "" + product;
return total;
}
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String Mess = total;
ModelAndView modelAndView = new ModelAndView("hello");
modelAndView.addObject("message", Mess);
return modelAndView;
}
}
# 1 楼答案
total
是类Multiply
的成员变量。从任何一种方法访问它都应该没有问题。请记住,它是未初始化的。因此,除非在handleRequest
之前调用getURL
,否则total
将不会被分配给任何String
并将给您一个错误另外,我会关注你在几个方面的资本化
编辑:只是为了澄清一下,从技术上讲,您并没有将值从一个方法传递到另一个方法。您正在访问两个方法之间的共享成员变量
# 2 楼答案
你在执行这一点时遇到了很多问题。首先,通过声明
total
static,该类的所有实例将具有相同的total
值。如果您使用的框架创建并重用了控制器,这可能会导致问题,因为类的所有实例都将引用并更新同一成员字段您想要的是让
getURL
方法返回total的值,然后从handleRequest
调用它getURL
可以是静态的,因为它不依赖于非静态成员字段。你真的应该把getURL
改名为getTotal
或getTotalFromURL
,因为这就是你要做的。你要求getURL
做的实际上是side effect,作为一种实践,应该避免