Javaの認定資格「Oracle Certified Java Programmer, Gold SE 7」。通称JavaGoldのオリジナル問題を紹介していきたいと思います。
前回の解答
まずは、前回の解答から。
正解は「(3) JAVA RUBY C JAVASCRIPT」となります。
今回の列挙型では、コンストラクタやメソッドを定義しています。値を列挙するときに後ろにカッコを記述することで、コンストラクタに値を渡すことができます。
プログラム言語の一覧というイメージで、Java/Ruby/Python/c/JavaScriptを列挙しており、さらにコンストラクタではその言語が登場した年を指定しています。
mainメソッドを実行するとTreeSetをインスタンス化し、列挙型の値をつぎつぎに追加していっています。
完成したTreeSetをイテレータを使ってループし、画面に出力しています。(このイテレータを使ったループに関しても頻出ですので押さえておきたいところです。)
今回のポイントはTreeSetと列挙型に関する以下の2点です。
- TreeSetの中に同じ値をaddした場合の挙動
- TreeSet内に格納された値は自動的にソートされるが、列挙型の場合はどのような順序となるか
まず、1点目に関しては、12行目および13行目でおなじ「Lang.JAVA」をaddしています。同じ値がTreeSetに追加された場合には、例外をスローしたりするのではなく単に追加されていなかったことになります。
2点目に関しては、TreeSetは格納した値を自動的に順序付けするコレクションです。そのため、列挙型のLangも順番がついて格納されるのですが、列挙型の順序は宣言した順(すなわち、Java→Ruby→Python→C→JavaScript)となります。コンストラクタで渡した値や宣言されている定数名の辞書順ではありませんので注意しておきましょう。
では、列挙型最後の問題です。
問18
次の説明のうち誤っているものを1つ選んでください。
- 列挙型はクラスと同様に、コンストラクタ、メソッド、メンバ変数を定義できる
- 列挙型をコンパイルするとクラスファイルが生成される
- newキーワードによるインスタンス化はできない
- 列挙型によって作成されたクラスを継承することはできない
- 列挙型に独自インタフェースを実装することができる
- 列挙型は、Comparatorインタフェースを実装している
問18の解答・解説と問19はこちら(少々お待ち下さい!)