- ベストアンサー
インスタンス生成で、○○.xxx();といった手法の意味
入門的に、インスタンスの作り方は、 AAA abc =new AAA(); なのですが、 VVV qqq = new ○○.xxx(); とこのような手法を用いた、方法があるようなのですが、意味がよくわかりませんので、サンプル、または、参考サイトを教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
1. VVV v = new AAA().xxx(); これは AAA クラスのインスタンスを生成した後そのまま xxx というメソッドを呼んでいます。 AAA a = new AAA(); VVV v = a.xxx(); とおなじです。 2. AAA.BBB v = new AAA.BBB(); こちらは入れ子クラスのインスタンス生成です。 AAA クラスの中にある BBB クラスのインスタンスを生成します。 本題ではありませんが、「手法」と「文法」はきっちり区別された方がよいかと思います。今回の質問は手法ではなく文法に関する質問ですね。
その他の回答 (4)
- kztk
- ベストアンサー率53% (59/110)
これだけだと、○○に()がついていないので、○○は単なるパッケージ名でxxxがクラス名という可能性があると思いますが。
- arakororin
- ベストアンサー率39% (80/205)
ちょっと間違えました。 わかると思いますけど、newが2個重なっています。 以下が正しいです。 ○○ oo = new ○○(); VVV qqq = oo.xxx();
- arakororin
- ベストアンサー率39% (80/205)
「new ○○」とした時点ですでにインスタンスが生成されます。生成したインスタンスを、変数に格納するかどうかは自由です。 で、変数に格納せずともインスタンスは使用できます。ですので、インスタンスのメソッドにアクセスしているだけです。 VVV qqq = new ○○.xxx(); は、 ○○ oo =new new ○○(); VVV qqq = oo.xxx(); という記述と等価で、ooというインスタンスをそれ以降使用しないために、変数への格納を省略した形といえます。 ちなみにNo1さんの内容は、デザインパターンにおけるシングルトンの説明であり、上記の話とは関係ないと思っていいです。少し勘違いをされただけだと思います。
- asahina02
- ベストアンサー率47% (95/202)
こんな感じになってると思われます。 class ○○ { public VVV xxx() { return( new VVV() ) } } このような手法はいろんなパターンがありえると思うのですが以前私が経験したパターンの場合、以下のような感じでした。 ようはクラスZZZのインスタンスをシステムで一つしか持たせたくない場合です。 ※しばらく離れていたので文法に多少間違いがあるかもしれません。ご容赦ください。 class ZZZ { static private ZZZ m_zzz = null; private ZZZ() { //コンストラクタは外部からアクセス不可 } static public ZZZ xxx() { if( m_zzz == null ) { m_zzz = new ZZZ(); } return( m_zzz ); } }