【问题标题】:Method return type String is not a String方法返回类型 String 不是 String
【发布时间】:2011-01-10 12:16:18
【问题描述】:

首先,我的目标是读取一个 URL,解析它,从中获取信息,然后将它提供给另一个方法 sendMessage,然后将它发送到 IRC 客户端。我做java的时间不长,所以我正在修改我在互联网上找到的代码。以下方法在它们自己的类文件中声明时起作用,并通过将 URL 传递给 main 方法来运行,但我似乎无法通过从 MyBot 调用类或在我的MyBot 文件。

public static BufferedReader read(String url) throws Exception{
    return new BufferedReader(
        new InputStreamReader(
            new URL(url).openStream()));}

public static String WebURL (String[] args) throws Exception{
    BufferedReader reader = read(args[0]);
    String line = reader.readLine();
    String newURL = new String();

    while (line != null) {
    if (line.contains("<meta ")) {
            String predef = new String(line.split("<meta content='")[1]);
            //line.indexOf finds where to take up till, substring takes from beginning until there
            String def = new String(predef.substring(0, (predef.indexOf("' name="))));
            newURL = def;
        }
    else {
        newURL = "No definition available";
    }
    line = reader.readLine(); }
    return newURL;

    }

现在我主要有以下几点:

if (message.startsWith("!def ")) {
        String[] myArray = new String[2];   
        myArray[0] = message;
        MyBot myURL = new MyBot();
        myURL.WebURL(myArray);
        sendMessage(channel, myURL);
    }

我在尝试编译时遇到的错误如下:

 MyBot.java:62: cannot find symbol
symbol : sendMessage(java.lang.String,java.lang.String)
cannot be applied to (java.lang.String,MyBot)
sendMessage(channel,myURL);
^

所以好像是在说MyURL不是String,但是方法返回类型是String..所以我这里明显有问题(可能是我用return错误吧?)

非常感谢任何人的帮助,如果有比这更好的方法来做我想做的事,我也会很高兴听到这个消息:) 谢谢!

编辑:对于告诉我将 myURL.WebURL(myArray) 传递给 sendMessage 的前几个答案,我已经这样做了,但是得到了以下错误,这让我更加困惑:

unreported exception java.lang.Exception; must be caught or declared to be throw 我知道这是因为 WebURL 引发了异常,但我不知道在声明字符串时如何声明/捕获它..

【问题讨论】:

  • 与错误无关,但您展示的 MyBot 的两个方法都是静态方法,应该像这样调用:String something = MyBot.WebURL(...)。创建 MyBot 的实例在这里什么都不做。此外,按照惯例,Java 中的方法名称不应以大写字母开头。

标签: java string url methods return-type


【解决方案1】:

myUrl 是来自以下行的 MyBot 类型:

MyBot myURL = new MyBot();

如果您更改下一行:

myURL.WebURL(myArray);
sendMessage(channel, myURL);

到:

String actualUrl = myURL.WebURL(myArray);
sendMessage(channel, actualUrl);

它应该可以工作

编辑:如果您从 myURL.WebUrl(myArray) 抛出异常,请将其包含在 try/catch 块中:

String actualUrl = null;
try {
    actualUrl = myURL.WebURL(myArray);
} catch (Exception e) {
    actualUrl = "Something default";
}

【讨论】:

    【解决方案2】:

    尝试改变

    myURL.WebURL(myArray);
    sendMessage(channel, myURL);
    

    到这里:

    sendMessage(channel, myURL.WebURL(myArray));
    

    您的 WebURL 方法返回一个字符串值,但您没有对它做任何事情。相反,您传递的是 myURL 对象本身,这就是编译器告诉您“无法应用于 (java.lang.String,MyBot)”消息的原因。意思是您将 MyBot 类型的东西传递给需要字符串的东西。

    【讨论】:

      【解决方案3】:

      myURL 不是字符串,而是MyBot。您需要将调用myURL.WebURL(myArray); 的结果分配给String 变量并使用它来调用sendMessage();:

      if (message.startsWith("!def ")) {
          String[] myArray = new String[2];   
          myArray[0] = message;
          MyBot myURL = new MyBot();
          String myURLString = myURL.WebURL(myArray);
          sendMessage(channel, myURLString);
      }
      

      【讨论】:

        【解决方案4】:

        需要传递myURL.WebURL(myArray)的返回值才能发送messgae

        String myURLString = myURL.WebURL(myArray);
        sendMessage(channel, myURLString);
        

        错误消息非常正确 - 它们通常很有帮助,并且几乎总是非常清楚类型错误。

        【讨论】:

          猜你喜欢
          • 2021-11-25
          • 2016-11-06
          • 2019-10-05
          • 2023-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-01
          相关资源
          最近更新 更多