Zwracanie obiektów

0

Cześć,

mam pewne pytanko. Mam funkcję, która zwraca mi po prostu obiekty (robię sobie fabrykę abstrakcyjną, ale to chyba nieważne teraz), no i wygląda ona tak (obj1, obj2 dziedziczą po Cklasa):

public Cklasa funkcja( Object obj ) {
        if( type instanceof obj1 ) {
            return new obj1();
        } else {
            return new obj2();
        }
}

ale czy nie można zrobić jakoś łatwiej, w sensie nie walić tych warunków tylko coś w stylu:

public Cklasa funkcja( Object obj ) {
        return new obj();
}

oczywiście to nie działa, ale może jest jakiś krótszy sposób na zwracanie różnych obiektów nie używając warunków?

Pozdrawiam i dziękuję za pomoc.

0

Możesz użyć metody Class.isInstance(Object obj). Ale i tak sprowadza się to prawie do tego samego co operator instanceof. Po prostu zamiast długiego ciągu "ifów" możesz elegancko zapakować obsługiwane klasy (a właściwie ich reprezentacje Class lub jeden wzorcowy obiekt) np. do enuma lub dowolnego kontenera. I wtedy możesz porównywać w pętli. W połączeniu z refleksją, którą podał kolega wyżej można obsługiwać klasy, które nie były znane aplikacji na etapie jej kompilacji.

0

Albo zamiast robić metodę dla obiektów typu Object, to zrób sobie klasę która ma metodę w której tworzy swój egzemplarz i potem używaj tej metody. I tak będziesz musiał powtarzać kod tworzący klasy, ale za to obejdzie się bez refleksji, będziesz mógł dodać parametry do konstruktora oraz przy dodawaniu nowej klasy dziedziczącej nie będziesz musiał zmieniać kodu fabryki.

0

jesli dobrze zrozumialam, nie chcesz miec warunkow. mozesz zrobic cos takiego:

 
   public Object test(Object obj){

      return obj instanceof TwojObiektA ? new TwojObiektA():new TwojObiektB();
   }

pzdr

0

No, bo to wcale nie jest warunek ;d To jest zwykly if-else tylko zakamuflowany i mniej czytelny.

0

jeny chlopie, badz troche milszy. jest warunek, ale zrozumialam ze chcesz uniknac slow if-else.

pzdr

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.