検索
連載

いまさら聞けないJavaによるオブジェクト指向の常識プログラマーの常識をJavaで身につける(11)(5/5 ページ)

本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、Javaを学習する際によく耳にする「オブジェクト指向」について。いまさら聞けない人はぜひ読んでみてください。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

Java APIの「裏技」java.lang.reflectパッケージとは?

 Java言語には、java.lang.reflectパッケージを通じて「裏技」のようなAPIが提供されています。このjava.lang.reflectパッケージを利用すると、公開されていないクラスのフィールドやメソッドを「のぞき見」できてしまいます。

java.lang.reflectパッケージで、クラスを「のぞき見」

 ここでは、ラーメン・クラスをのぞき見してみます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

フィールド一覧
 private java.lang.String Ramen.fSoup
メソッド一覧
 public java.lang.String Ramen.getSoup()
 public void Ramen.show()
実行結果(コンソール出力)

 ラーメン・クラスに、どのようなフィールドやメソッドがあるのかが、表示されていますね。特別なjarファイルをクラスパスに追加などするまでもなく、このような芸当ができることもJava言語の特徴の1つです。

オブジェクト指向を「台無し」にしてしまうjava.lang.reflectパッケージ

 さらに、java.lang.reflectパッケージを利用すると、カプセル化により保護されているはずのオブジェクトの内容を、書き換えることもできてしまいます。ラーメンのトッピングを勝手に変えて、「いちごラーメン」を作ってみます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 上記のプログラムでは、「field.setAccessible(true);」を呼び出し、Java言語のアクセス修飾子とかかわりなく操作できるようにしてから、「field.set(ramen, "いちご");」を呼び出して、fToppingの値を書き換えています。

ラーメン・オブジェクトを確認
ラーメンを表示
 トッピング: いちご
 スープ : とんこつ
実行結果(コンソール出力)

 このラーメン屋では提供していないはずの、「いちごラーメン」が出来上がってしまいました。

図8 いちごラーメン
図8 いちごラーメン(こちらの図はJavaプログラミング[アプリケーション編]ステップアップラーニング』(技術評論社)で使われた図を引用して再作成したものです)

 このように、java.lang.reflectパッケージはオブジェクト指向を「台無し」にしてしまう力を併せ持っています。ですから、よほど特殊な目的を実現するプログラミングを行う場合でもない限り、java.lang.reflectパッケージは「利用してはいけない」APIである、ということも、Java言語によるプログラミングの常識なのです。

もっとオブジェクト指向を習得するためには?

 Java言語を使ってオブジェクト指向の基本概念を見てきましたが、いかがだったでしょうか。オブジェクト指向は難しくとっつきにくいものですが、これを使いこなすといろいろな応用ができることが期待できます。

 初心者のうちは、ほかの人やAPIなどがどのようにオブジェクト指向を扱っているのかを読む/知ることから学んでいくのが良い学習法だと思います。そして、オブジェクト指向の基本的な概念を理解したうえで、オブジェクト指向に関連する技術の中から、興味があるものにチャレンジしていってみましょう。

参考文献

筆者紹介

blanco Framework(コミッタ)

伊賀 敏樹(いが としき)
ハンドル:いがぴょん

1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。 現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。 趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。

ホームページ
いがぴょんの日記ウェブページv2(1996年から続けているWeb日記)

主な著書
やさしく学ぶ基礎からのJDBC
Javaプログラミング[アプリケーション編]ステップアップラーニング


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る