Type mismatch: cannot convert from StringBuilder to String

前端 未结 3 1217
刺人心
刺人心 2021-02-02 10:10

This method returns the source of the given URL.

private static String getUrlSource(String url) {
    try {
        URL localUrl = null;
        localUrl = n         


        
3条回答
  •  失恋的感觉
    2021-02-02 10:37

    Just use

    return ma.toString();
    

    instead of

    return ma;
    

    ma.toString() returns the string representation for your StringBuilder.

    See StringBuilder#toString() for details

    As Valeri Atamaniouk suggested in comments, you should also return something in the catch block, otherwise you will get a compiler error for missing return statement, so editing

    } catch (Exception e) {
        Log.e("ERR",e.getMessage());
    }
    

    to

    } catch (Exception e) {
        Log.e("ERR",e.getMessage());
        return null; //or maybe return another string
    }
    

    Would be a good idea.


    EDIT

    As Esailija suggested, we have three anti-patterns in this code

    } catch (Exception e) {           //You should catch the specific exception
        Log.e("ERR",e.getMessage());  //Don't log the exception, throw it and let the caller handle it
        return null;                  //Don't return null if it is unnecessary
    }
    

    So i think it is better to do something like that:

    private static String getUrlSource(String url) throws MalformedURLException, IOException {
        URL localUrl = null;
        localUrl = new URL(url);
        URLConnection conn = localUrl.openConnection();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
        String line = "";
        String html;
        StringBuilder ma = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            ma.append(line);
        }
        return ma.toString();
    }
    

    And then, when you call it:

    try {
        String urlSource = getUrlSource("http://www.google.com");
        //process your url source
    } catch (MalformedURLException ex) {
        //your url is wrong, do some stuff here
    } catch (IOException ex) {
        //I/O operations were interrupted, do some stuff here
    }
    

    Check these links for further details about Java Anti-Patterns:

    • Java Anti-Patterns
    • Programming Anti-Patterns
    • An Introduction to Antipatterns in Java Applications

提交回复
热议问题