了解何时使用Object作为返回类型

时间:2015-03-19 05:56:01

标签: java

请考虑以下代码。我试图了解Object返回类型的需要。可能是我还没有理解我们何时应该在一个方法中使用返回类型作为对象,我要去 通过以下代码,您可以看到AdNewCpp方法在doGet方法中调用,AdNewCpp方法的返回类型已定义为Object。我想知道是否有什么东西 否则可以用来代替Object作为返回类型?

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html;charset=UTF-8");
        // Allocate a output writer to write the response message into the network socket
        PrintWriter out = response.getWriter();

        // Use ResourceBundle to keep localized string in "LocalStrings_xx.properties"

        // Write the response message, in an HTML page
        try {
            out.println("<!DOCTYPE html");  // HTML 5
            out.println("<html><head>");
            out.println("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");

            out.println(AddNewCpp("cpp test - new"));

            out.println("<head><title>Test API</title></head>");
            out.println("<body>");
            out.println("<h3>TestAPI</h3>");

            // Tabulate the request information 
            out.println("</body></html>");
        }   
        finally {
            out.close();  // Always close the output writer
        }
    }

    public static Object AddNewCpp(String cppDesc) throws IOException {
        String accessKey = "DNN7ACCESSKEYEXAMPLE";
        String secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
        String uRLCppList = "http://something.com/abc";
        String method = "POST";
        java.util.Date currentTime = new java.util.Date();
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");

        // Give it to me in GMT time.
        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
        String dateTimeString = sdf.format(currentTime);

        String signature = generateSignature(method, secretKey, dateTimeString);
        String authorization = accessKey + ":" + signature;
        Map<String, String> params = new HashMap<String, String>();
        params.put("cppListDesc", cppDesc);

        String[] result = sendHttpRequest(uRLCppList, "POST", params, dateTimeString, authorization);

        return result;
    }

3 个答案:

答案 0 :(得分:2)

您可以返回String [],因为您实际从 AddNewCpp方法返回字符串数组

public static String[] addNewCpp(String cppDesc) throws IOException{
                               /\    
                               ||
            //Method Name Should be in camelCase(good Practice)
 String[] result = sendHttpRequest(uRLCppList, "POST", params, dateTimeString, authorization);
 return result;
}

答案 1 :(得分:1)

嗯,你在任何情况下都会返回一个String数组,至少在这里,所以你可以将Object替换为String[],这不会发生太大变化,尤其是因为out.println无论如何都不会呈现出非常可读的结果。

如果您知道不再使用特定类型,则使用Object作为返回代码。但是,当然,这意味着,使用该返回代码的方法必须准备好应对任何事情。在您的示例中,这是通过隐式调用每个Object所具有的toString()out.println)来完成的。在许多其他情况下,您必须执行许多instanceof检查以查看Object实际上是什么。

就个人而言,我会尽量避免它,因为它会使代码本身出乎意料:只是阅读方法签名,你不知道结果会是什么,你必须阅读方法本身或更糟糕的文档。

答案 2 :(得分:0)

在这个例子中,我不明白为什么AddNewCpp不会返回String []。由于Java具有泛型,因此也不需要直接使用Object类。