将变量值从一种方法传递到另一种方法

时间:2012-07-31 20:37:06

标签: java variables methods

这看起来很容易,但我不知道为什么我遇到这样的困难...所以在getURL中,我返回字符串“total”。我正在尝试在handleRequest方法中返回已经拥有的SAME值“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;
    }
}

2 个答案:

答案 0 :(得分:0)

total是类Multiply的成员变量。从任一方法访问它都应该没有问题。请记住,它是未初始化的。因此,除非您在getURL之前致电handleRequest,否则total将不会被分配给任何String,并会给您一个错误。

另外,我会在几个方面观察你的资本化。

编辑:为了澄清,您在技术上并未将值从一个方法传递到另一个方法。您正在两个方法之间访问共享成员变量。

答案 1 :(得分:0)

您在实施此问题时遇到了一些问题。首先,通过声明total static,此类的所有实例将具有相同的total值。如果您正在使用创建控制器并重用它的框架,这可能会导致问题,因为该类的所有实例都将引用并更新相同的成员字段。

您想要的是使用getURL方法返回总值,然后从handleRequest中调用它。 getURL可以是静态的,因为它不依赖于非静态成员字段。您应该将getURL重命名为getTotalgetTotalFromURL,因为这就是您正在做的事情。你要求getURL做的事实上是side effect,应该避免这种做法。

public class Multiply implements Controller {

    public static String getURLTotal(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("&");
        int 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;

        }
        return Integer.toString(product);
    }

    public ModelAndView handleRequest(HttpServletRequest request,
                                      HttpServletResponse response)
                 throws ServletException, IOException 
    {
        String Mess = Multiply.getURLTotal(request);

        ModelAndView modelAndView = new ModelAndView("hello");
        modelAndView.addObject("message", Mess);

        return modelAndView;
    }
}