私は現在Java 8
、ラムダやメソッド参照などの機能について深く掘り下げています。少し遊んでみると、次の例にたどり着きました。
public class ConsumerTest {
private static final String[] NAMES = {"Tony", "Bruce", "Steve", "Thor"};
public static void main(String[] args) {
Arrays.asList(NAMES).forEach(Objects::requireNonNull);
}
}
私の質問は:
main メソッド内の行がコンパイルされるのはなぜですか?
私の理解が正しければ、参照されたメソッドの署名は、機能インターフェースの SAM 署名に対応している必要があります。この場合、コンシューマーは次の署名を必要とします。
void accept(T t);
ただし、requireNonNull
メソッドはT
void の代わりに戻ります。
public static <T> T requireNonNull(T obj)