- ベストアンサー
Cの関数内ローカルstatic変数
と同様の機能をJavaで実現したいのですが class Testclass { testmethod() { //////////////////////// //ここだけにしかコードを書けない //////////////////////// } } という条件で Testclass testclass=new Testclass(); が最初に生成された後他メソッド内で testclass.testmethod(); が実行されるたびに 1カウントアップする変数countを作成することはできるでしょうか? 上のように1つのメソッド内だけしかコーディングできません Cならば static int count=0; count++; を記述すれば片付くのですが Javaの場合はメソッド外に記述しない限りできないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
14.4 Local Variable Declaration Statements によると、ローカル変数に static キーワードは使えないので、 static int count=0; のように書くことはできないと思います。 スコープがメソッドの中に納まらなくなってもいいなら、 public class StaticVar { static int count = 0; } みたいな外部クラスを作れば、代用できるような気はします。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1>メソッド内では…と定義するとstatic部分でエラーになります ローカルクラスではstatic フィールドが使えません。 #1の回答は、同一パッケージ内でクラスを用意するのではなくて、別にクラスファイル用意するということ(外部クラス)です。 メソッド内で動的にクラスを作成するのもありかな(できるかどうかは試してないですが)とか思いますが、 本当にそのメソッドの中だけということであればできないように思います。
お礼
ありがとうございます できそうも有りませんね
- bgbg
- ベストアンサー率53% (94/175)
回答とお礼から状況を整理すると ・実装したいメソッド内で何らかの値を保持する必要がある ・メソッド外に勝手にコードを書けない ということでしょうか? まず、前提としてCのローカルstatic変数と同等のことをJavaで行うには、やはりメソッドの外部にstatic変数として定義するしかありません。 で、解決策としては、 ・その値は本当にメソッド内(クラス内)で保持する必要があるかどうか考える →値を引数で受取り、カウントアップした後returnで返す方法は使えないか?(つまり保持は呼び出し元に任せる) →外部のクラスに保持させることはできないか?(別のクラスを作る権限が必要) →そもそも保持すべき値なのか? ・クラスの設計を変える →本当に保持が必要な値ならクラス設計を司る人に設計変更したいと掛け合うべき(本当に保持が必要なら「できません」では話がすまない) というあたりをもう少し詰めてみるといいでしょう。 本当に質問の条件の範囲で回答するなら、「値の保持は呼び出し元に任せる」となります。 でもそれは呼び出し元には必ずしも幸せな実装ではないことも考えてください。
お礼
ありがとうございます 変なツールを使っていて ユーザがコーディングできるのはメソッド内だけです ただデータベースに接続できるので わざわざメモリ変数をデータベースに格納すればできます 簡単にはできないということですね
補足
ありがとうございます クラスの定義もメソッド内にしかできません 複数のクラスが出来上がっていて そのクラス内のメソッド内にしかコーディングができないのです メソッド内では class StaticVar { static int count = 0; } と定義するとstatic部分でエラーになります よろしくお願いします