【问题标题】:Java C#'s goto equivalentJava C# 的 goto 等价物
【发布时间】:2018-11-16 19:19:49
【问题描述】:

我需要的是一种回到顶部的方法是触发一个特殊事件,这是我在 C# 中的代码

public void SendRequest()
{

    send:
    {

        var response = new RequestBuilder("https://google.com").
            WithMethod(HttpMethod.GET).
            Send();

        if (response.Contains("Special Keyword"))
            goto send;

        // Continue..

    }

}

此代码在 C# 中工作,它会重新发送请求,直到页面不包含“特殊关键字”

知道如何在 Java 中做同样的事情吗?

这是我尝试过的,但即使页面包含“特殊关键字”,它最终也会显示“完成”

public void SendRequest() {

    send: {

        String response = new RequestBuilder().
                to("https://google.com").
                buildAndSend().
                toString();

        if(response.contains("Special Keyword"))
            break send;

        // Continue..

        System.out.println("Done");

    }

}

【问题讨论】:

  • goto 有合法用途。这不是一个。

标签: java c# goto


【解决方案1】:

有一个循环:

while (true) {
    String response = ...; 
    if (response.contains("Special Keyword")) {
      continue; // takes you back to the start of the loop.
    }

    break;
}

老实说,如果我在真实代码中看到这一点,我会摸不着头脑。反转条件会更惯用:

while (true) {
  String response = ...; 
  if (!response.contains("Special Keyword")) {
    break;
  }
  // No continue.
}

【讨论】:

  • 这样不是更好吗? do { ... } while (response.Contains("Special Keyword"));
  • @Andreas 你可以这样做,如果你可以接受/需要在循环范围之外的响应。我试图让它与问题代码相似。
【解决方案2】:

您可以使用while 循环。在您的情况下,do-while 循环似乎是合适的:

String response;

do {
    response = new RequestBuilder().
            to("https://google.com").
            buildAndSend().
            toString();
} while (response.contains("Special Keyword"));


System.out.println("Done");

【讨论】:

  • 请注意,使用 do/while 循环必然需要在循环外部声明响应变量,如果您之后不使用它,这可能是不可取的。另请注意,您可以在循环之前保留初始未分配的响应,因为它总是在读取之前在循环中分配。
【解决方案3】:

goto 是 java 中的保留作品,但没有使用。

其实 goto 是个坏习惯Why is goto Bad

【讨论】:

    【解决方案4】:

    函数调用是一种替代 goto 的方法。因此,您可以像这样对函数进行递归调用(但将其转换为 Java):

    public void SendRequest()
    {
        var response = "Testing123...";
    
        // Form the request here...
    
        if (response.Contains("Special Keyword"))
        {           
            SendRequest();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-28
      • 2010-11-19
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2010-11-03
      • 2014-08-29
      • 2011-07-21
      相关资源
      最近更新 更多