【问题标题】:C# code passing void as argument? What's that in Java? [duplicate]C# 代码将 void 作为参数传递?在 Java 中那是什么? [复制]
【发布时间】:2016-03-10 12:38:58
【问题描述】:

我正在将一个小程序从 C# 翻译成 Java。 剩下 1 行我想知道:

Thread eventReadingThread = new Thread(() => ReadEvents(url, streamingMode));
...
        static void ReadEvents(String serviceURL, bool streamingMode)
    {
        if (streamingMode)
        {
            WebRequest httpClient = WebRequest.Create(serviceURL);
            httpClient.Method = "GET";
            byte[] buffer = new byte[4096];
...

我将这里的第一行解释为“如果 ReadEvents 返回小于空数组则为真”。但是它没有任何意义,因为 void 参数不编译,而且布尔参数不适合 Thread 的构造函数。

这在 Java 中会是什么?

【问题讨论】:

标签: java c# code-translation


【解决方案1】:

在 Java 中会是什么?

在 Java 8 中,您只需将 => 转换为 ->

{
    Thread thread = new Thread(() -> readEvents(url, streamingMode));
}

static void readEvents(String serviceUrl, boolean streamingMode) {
    // ...
}

我将这里的第一行解释为...。代码试图做什么?

您需要阅读lambda expressionsJavaC#)。在这种情况下,它是“为我创建一个调用 readEvents 方法的 RunnableThreadStart

【讨论】:

    【解决方案2】:

    首先,

    static void ReadEvents
    

    并不意味着 ReadEvents 在任何情况下都返回 true。 void 关键字表示该方法没有返回值(类似于 VB 中的 Sub)。

    其次,您将数组定义为:

    byte[] buffer = new byte[4096];
    

    byte 的默认值为 0,因此您实际上永远不会有一个空数组,而是有一个 4096 字节的数组,值为 0。除非在代码中的某个位置(您没有显示)您重新定义数组为 byte[] 或 null。

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 2021-10-14
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2012-11-19
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多