Rozwiązania widzę dwa i obydwa chyba takie sobie.
- Jak tworzysz w konstruktorze ten inny obiekt, dajmy na to:
UberObject obj = new UberObject(MyObjects.subObject); //MyObjects.subObject to wartość Twojego enuma, może robisz to inaczej
to w konstruktorze poza tworzeniem tego drugiego obiektu, przypisz odpowiedniego enuma do tej twojej klasy, którą nazwałem UberObject. (obiektem tej klasy jest Twój obiekt: obj).
A potem:
switch(obj.GetObjectType())
{
...
}
I wtedy GetObjectType zwraca Ci to, co przypisałeś w konstruktorze. Druga opcja, chyba lepsza, jest taka, że tworzysz sobie klasę bazową dla tych wszystkich klas, które tworzysz później w konstruktorze. Klasa bazowa ma mieć:
prywatne pole z typem Twojego enuma
publiczną: GetObjectType(), która zwraca tego enuma. W konstruktorze tej innej klasy ustawiasz odpowiednio tego enuma. A potem:
switch(obj.getInnyObiekt().GetObjectType())
{
...
}
Jednak bardziej niezawodnym rozwiązaniem jest posłużenie się RTTI. Pewnie w Javie jakieś jest, coś w stylu:
if(obj.getInnyObiekt() is FantastycznaKlasa)
{
}
else...
Oczywiście to się robi brzydkie, można zrobić mechanizm, który Ci to zamieni na jakieś enumy.
Ale przede wszystkim zastanów się, czy nie projektujesz źle programu i faktycznie to potrzebujesz. Bo być może wystarczy odpowiednio zaprojektować interfejsy i klasy bazowe i potem po nich dziedziczyć.