繁体   English   中英

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

[英]Passing value of variable from one method to another

这似乎很容易,但是我不知道为什么会有这样的困难...所以在getURL中,我返回了字符串“ total”。 我试图返回方法请求中已经具有的SAME值“总计”。 有什么建议吗? 提前致谢!

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;
    }
}

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

另外,我会在几个方面关注您的大写字母。

编辑:只是为了澄清,从技术上讲,您不是将值从一种方法传递给另一种方法。 您正在两种方法之间访问共享的成员变量。

您在执行此操作时遇到许多问题。 首先,通过声明total static,此类的所有实例将具有相同的total值。 如果使用的框架可以创建并重用控制器,则可能会导致问题,因为该类的所有实例都将引用并更新相同的成员字段。

您想要的是让getURL方法返回total的值,然后从handleRequest调用它。 getURL可以是静态的,因为它不依赖于非静态成员字段。 您实际上应该将getURL重命名为getTotalgetTotalFromURL因为这是您正在做的。 您要求getURL进行的操作实际上是副作用 ,因此应避免这种做法。

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM