Tips

Java 8 練習問題 上級編

Java 8 練習問題 上級編

動作環境と問題内容について

javaの練習問題です。 出題範囲はjava 8 で追加された範囲を中心とします。難易度は Java SE 8 Programmer II の試験と同程度※を想定しています。

※ただし、場合によっては同試験には出題されない内容や形式が含まれることもあります。あくまでも難易度の目安として解答してください。

実行環境は以下の通りです。

JDKのバージョン:java 8 Update191

 

※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。

問題

次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。

 

プログラム(Sample.java)

import java.util.stream.Stream;
import java.util.ArrayList;
import java.util.OptionalInt;

public class Sample{
    public static void main(String[] args){
        System.out.println(OptionalInt.empty().getAsInt() == null);
    }
}

 

問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ g から正しいものを選べ。

選択肢

a. trueと表示される

b. falseと表示される

c. コンパイルエラー

d. 実行時に NullPointerException が発生する

e. 実行時に NoSuchElementException が発生する

f. コンパイル・実行ともにできるが何も表示されない

g. コンパイル・実行ともにできるが実行結果は不定である

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

 

c. コンパイルエラー

 

解説

今回は OptionalInt 型を利用している。

 

OptionalInt 型は Oracle の公式ドキュメントによると次のように記載されている。

「int値が含まれている場合も含まれていない場合もあるコンテナ・オブジェクトです。」

 

OptionalInt 型は、empty() メソッドで、空の OptionalInt インスタンスを返す。

また、getAsInt() メソッドで、保持している値を返す。

 

今回の問題では、OptionalInt.empty() で返ってきた値から、getAsInt() メソッドで値を取り出し、== 演算子で null と比較しようとしている。

この場合、一見すると 実行時に NullPointerException や NoSuchElementException が発生しそうである。

しかし、そもそも getAsInt() メソッドの戻り値は int 型であるため、== 演算子で null と比較することができない。

 

以上から、コンパイルエラーとなる。

 

Stream API の利用時にはラムダ式やメソッド参照、Optional 型や OptionalInt 型といった、Java 7 以前の環境にはなかったクラスや書き方が使用可能となっている。

設計や実装時には十分に注意する必要がある。


 <<前回の問題はこちら  |  第1問はこちら  |  次の問題はこちら>> 


 オススメ!!→ java 8 の問題はこちら

 オススメ!!→ javaのプログラム作成形式の練習問題はこちら

 オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2

 オススメ!!→ java関連の記事はこちら

新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search