Java przekazanie klasy do wskazania obiektu

0

Witam
Chciałbym zrobić żeby metoda przyjmowała klase, a następnie wyszukiwała obiektów z listy tej klasy.
Oprócz zmiany klasy na String czy jest jakiś inny sposób na przekazanie samej klasy ?

    private void chosePanelOnTop(Class<?> target) {
        powZawartosci.removeAll();
        mainFrame.add(mainBar, BorderLayout.NORTH);
        for(Object o : mainPanels) {
            if(o instanceof target) {

            }
        }
0

To ci nie zadziała bo w linii:
if(o instanceof target) {
porównujesz obiekt (jakiś tam panel) z obiektem innej klasy (Class)
Możesz spróbować czegoś takiego:

public class Classs {
    public static boolean foo(Class<?> clazz, Object o){
return         clazz.getCanonicalName().equals(o.getClass().getCanonicalName());
    }
}

Zastanów się też czy na 100% chcesz używać refleksji, a nie np. dodać jakiś atrybut do tej klasy, której obiekty chcesz filtrować. Refleksja potrafi dać po tyłku.

1

@piotrpo: są lepsze opcje niż porównywanie Stringów: https://www.baeldung.com/java-isinstance-isassignablefrom

2

if (target.isInstance(o)) { ... }

1

No mógłbyś też zrobić mapę klas do listy,

Map<Class<?>, List<?>> map;

W tej mapie pod kluczem trzymałbyś sobie instancje tej klas.

Ale cofając się od pytania, po co w ogóle chcesz wyszukiwać obiekty po klasie? Bo coś mi to brzydko pachnie; nie wolałbyś tego ogarnąć polimorfizmem?

5

Jeśli nie piszesz jakiegoś potężnego frameworka to takie cuda z instanceof i refleksją na 99% oznaczają błąd w projekcie. Napisz proszę co chcesz tym mechanizmem osiągnąć, bo mam wrażenie że chcesz zrobić coś w stylu event dispatchera do różnych kontrolek w UI i podchodzisz do tego z jakieś bardzo złej strony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1