javaの質問です。
インスタンスが生成された時のままの初期状態であることをif文で判定するためには、どのように書けば良いでしょうか。
インスタンスのクラスにequalsメソッドがない場合、ある場合の両方について教えて下さい。
クラスによっては isEmpty とかありますけど、一般的にはないと思います。オブジェクト指向的に意味がないので。
初期状態の定義がないので無理だと思います。
equalsメソッドがあるStringでも、どんな状態を初期状態とするのか不明です。
hoshi-takanoriさん
コメントありがとうございます。
オブジェクト指向的に意味がない、という件について詳しく教えていただけないでしょうか。
言葉が足りませんでしたね。「任意のクラスのオブジェクトに対して初期状態かどうかを調べる」ということに意味がないということです。初期状態を定義できなかったり、定義しても意味がないクラスもありますので。特定のクラス、例えば ArrayList や String に対しては isEmpty のような操作が定義できますが、あくまでも空かどうかというそのクラスに固有の操作となります。
momon-gaさん
コメントありがとうございます。
たしかに、何を初期状態とするかの定義がないと無理そうですね。。
どんなクラスのインスタンスについての話でしょうか。
(Stringのようなイミュータブルなクラスでは、そもそも状態を変更する方法がないので、存在するインスタンスは必ず「生成された時のままの初期状態」です。)
hoshi-takanoriさん
詳しい説明をありがとうございます。
なるほどですね。
ArrayListなどは何も入っていないという判定が出来るので、任意のクラスに対しても簡単にそういうことが出来るのではと思ってQAを出してしまいました。
理解することができました、ありがとうございました。
maisumakunさん
コメントありがとうございます。
任意のクラス(独自に作ったクラス)について、質問させていただきました。
言葉足らずで申し訳ありません。
たしかに、変更不可能なクラスは、たしかにインスタンス作成時点のまま初期状態ですね。
ArrayListもensureCapacityメソッドで容量変更したら初期状態じゃないと思いますけどね。
初期状態であることを判別する必要があるならばそういう設計をしてください。
通常そうである必要はないです。
リストにあるとか言ってますが
ArrayList<String> strings1 = new ArrayList<>(Arrays.asList("1","2"));
ArrayList<String> strings2 = new ArrayList<>();
上記の初期状態はは違いますよね?
あなたの回答
tips
プレビュー