On 11 May 2006 06:28:23 -0700, Cruella DeVille wrote:
> I have one abstract class Form in which ApplicationForm and
> KindergartenForm extends. In my Query class I check wether Form f is
> instanceof ApplicationForm vs KindergartenForm and cast f
> thereafter.
>
> But everytime I call a method from eg. ApplicationForm on f (that is
> already casted to ApplicationForm) I have to cast again. Is there a
> way to permanently cast f to either ApplicationForm or
> KindergartenForm or do I have to cast every time I invoke a method
> on my f object?
[...]
> This does not permanently cast f to correct type, how come?
First, the fact that you seem to need more than occasional use of
instanceof and casting is a strong indication of poor design. For
example, the "do stuff based on type of form" probably belongs in the
specific subclasses. Then you'd simply do f.doStuff() and the correct
method would be invoked.
Realize that casting does not change the object or its type in any
way. Casting simply lets you use an Object reference as if it referred
to an Object of a different type.
So if you have a reference that looks like this:
Form f = ...
Then f is and always will be a Form reference.
If you know that your object is a KindergartenForm (a subclass of
Form), then declare a KindergartenForm reference:
KindergartenForm kf = ...
If the Form object is in fact a KindergartenForm, you can assign f to
kf with a cast:
kf = (KindergartenForm)f;
After that, you can use kf as a KindergartenForm without additional
casting.
/gordon
--
[ do not email me copies of your followups ]
g o r d o n + n e w s @ b a l d e r 1 3 . s e
|