有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (2) 个答案

  1. # 1 楼答案

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

    另外,我会关注你在几个方面的资本化

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

  2. # 2 楼答案

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

    您想要的是让getURL方法返回total的值,然后从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;
        }
    }