なぜ私は、ボイド関数からvoidを返すことができません

StackOverflowのの息子:

なぜこのコードの動作を行います

void hello()
{
hello();
return;
}

これはそうではありません

void hello(){return hello();}

エラー:

java.java:13: error: incompatible types: unexpected return value
return hello();

(論理的なエラーを無視してください)

主な質問:なぜ我々がvoidの関数にvoidを返すことができませんか?

任意の手段によってんJavaは別の種類をサポートして提供しvoid、多分ラッパークラスと呼ばれますかVoid

アンドリューTobilko:

やり方がある

class A {
  Void a() {
    // ...
    return a();
  }
}

しかし、java.lang.Voidのuninstantiable表現されvoidますことを意味タイプは、それからインスタンスを作成することはできません(と、賢明に、あなたがするべきではありません)。結局、あなたが値を返す必要があるだろう、それは可能性がnull-私は考えることができる唯一の「合法的」1。

それは持つアプリケーションがあるジェネリックとリフレクションAPIを、私はそれを再帰的な方法の手の込んだを作る目的のために、ここで使用されて疑います(?)。

class A {
  Consumer<String> a() {
    return System.out::println;
  }
}

あなたはそれを返す関数のインスタンスを返すようにしたいかもしれませんvoidその後、機能インタフェースはjava.util.function.Consumerぴったりかもしれません。

実際に、それは最高のあなたに合う種類のいずれかのインタフェースである可能性があります。例えば、

class A {
  Runnable a() {
    // ...
    return () -> a();
  }
}

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=396818&siteId=1