Javaによる例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/29 19:11 UTC 版)
「メソッド (計算機科学)」の記事における「Javaによる例」の解説
Javaで記述したインスタンスメソッドと静的メソッド(クラスメソッド)の例を示す。Java では static 修飾子がついたメソッドが静的メソッドであり、ついていなければインスタンスメソッドである。 public class MethodSample { /** インスタンスフィールド */ private String name; /** クラスフィールド */ private static int number; /** インスタンスを生成するためのコンストラクタ */ public MethodSample(final String name) { this.name = name; } /** インスタンスメソッド、getter */ public String getName() { return this.name; } /** 静的メソッド、getter */ public static int getNumber() { return MethodSample.number; } /** 静的メソッド、setter */ public static void setNumber(final int number) { MethodSample.number = number; }} Smalltalk同様インスタンスメソッドを呼び出すには、まずコンストラクタを呼び出してインスタンスを生成しなければならない: MethodSample objectA = new MethodSample("John");MethodSample objectB = new MethodSample("Joe"); 上記の例は、Smalltalkの例におけるインスタンスオブジェクトの生成と同様に動作する。C++の表記を踏襲したJavaでは、new演算子によってインスタンスを生成する。 インスタンスメソッドを呼び出すには次のように記述する: objectA.getName(); // "John" を返すobjectB.getName(); // "Joe" を返す 上記の例は、Smalltalkの例におけるインスタンスメソッドの呼び出しと同様に動作する。 クラスメソッドを呼び出すには次のように記述する: MethodSample.setNumber(100);MethodSample.getNumber(); // 100 を返す 上記の例は、Rubyの例における直接クラス名を指定したクラスメソッドの呼び出しと同様に動作する。 Javaではメタクラスとしてjava.lang.Classクラスをサポートする。java.lang.Object.getClass()メソッドによりClass型オブジェクトを取得できる。また、クラス名.classという構文でClass型オブジェクトを取得することもできる。さらにリフレクションを使うことで、Class型オブジェクトからメソッドを呼び出したり、フィールドにアクセスしたりすることもできる。 .NET FrameworkではメタクラスとしてSystem.Typeクラスをサポートする。System.Object.GetType()メソッドによりType型オブジェクトを取得できる。C#ではtypeof演算子により型シンボルからType型オブジェクトを取得することもできる。また、リフレクションもサポートしている。 C++はクラス型オブジェクトやリフレクションをサポートせず、クラス自体を何らかの変数に代入するようなことはできない。
※この「Javaによる例」の解説は、「メソッド (計算機科学)」の解説の一部です。
「Javaによる例」を含む「メソッド (計算機科学)」の記事については、「メソッド (計算機科学)」の概要を参照ください。
Javaによる例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/04/13 17:26 UTC 版)
「State パターン」の記事における「Javaによる例」の解説
以下は状態(State)のインタフェースと2つの実装である。状態メソッドはコンテキストオブジェクトへの参照を持ち、その状態を変えることができる。 interface State {void writeName(StateContext stateContext, String name);}class StateA implements State {public void writeName(StateContext stateContext, String name) {System.out.println(name.toLowerCase());// コンテキストをStateBに遷移するstateContext.setState(new StateB());}}class StateB implements State {private int count = 0;public void writeName(StateContext stateContext, String name){ System.out.println(name.toUpperCase()); // StateBのwriteName()が2度呼び出された後にコンテキストをStateAに遷移するif (++count > 1) { stateContext.setState(new StateA()); }}} コンテキストクラスは、初期状態(この場合はStateA)でインスタンス生成したところの状態変数を持つ。そのメソッドでは、状態オブジェクトの対応するメソッドを使用する。 public class StateContext {private State myState;public StateContext() {setState(new StateA());}// 通常は、Stateインタフェースを実装しているクラスによってのみ呼び出されるpublic void setState(State newState) {this.myState = newState;}public void writeName(String name) {this.myState.writeName(this, name);}} 用法は以下。 public class TestClientState {public static void main(String[] args) {StateContext sc = new StateContext();sc.writeName("Monday");sc.writeName("Tuesday");sc.writeName("Wednesday");sc.writeName("Thursday");sc.writeName("Saturday");sc.writeName("Sunday");}} TestClientStateからのmain()の出力は次のようになるはずである。 mondayTUESDAYWEDNESDAYthursdaySATURDAYSUNDAY
※この「Javaによる例」の解説は、「State パターン」の解説の一部です。
「Javaによる例」を含む「State パターン」の記事については、「State パターン」の概要を参照ください。
- Javaによる例のページへのリンク