array list zawierajaca metody?

0

Witam,

Chcialbym stworzyc tablice metod, ktore beda wykonywane jedna po drugiej.

Cos na zasadzie:

public Boolean foo_0() { return true;}

public Boolean foo_1() { return true;}

public Boolean foo_2() { return true;}

ArrayList<Method> methods= new ArrayList<Method>();
methods.add(foo_0);
methods.add(foo_1);
methods.add(foo_2);

Za kazdym razem gdy dana metoda zwroci true - przechodze do wykonania kolejnej.

problem w tym, ze nie moge wrzucic tu metody z innej klasy

methods.add(jakasKlasa.foo_0);
0

Poczytaj o refleksji.

Coś w ten sposób spróbuj:

public static List<Method> getMethods(Class<?> klasa) {
    List<Method> methods = new ArrayList<Method>();
    for (Method method : klasa.getMethods())      
            methods.add(method);        
    
    return methods;
}
0

hm, w takim wypadku zrobi sie balagan.
Przykladowo, chce dodac 3 metody z 3 roznych klas.

List<Method> methods = new ArrayList<Method>();

try {
			methods.add(PierwszKlasa.class.getMethod("jakasMetoda"));
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

try {
			methods.add(DrugaKlasa.class.getMethod("jakasMetoda"));
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

try {
			methods.add(TrzeciaKlasa.class.getMethod("jakasMetoda"));
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

A co jesli bede robil refaktoring i zmienie nazwy tych metod?
Posypie sie :)

0

Nie trzeba refleksji. Można np zrobić jakiś interfejs np:

interface Cośtam {
  boolean odpal();
}

Następnie potworzyć obiekty, np:

lista.add(new Cośtam() {
  @Override
  public boolean odpal() {
    jakiśObiekt.metoda();
    return true;
  }
});

A sama lista to:

final List<Cośtam> lista = new ArrayList<Cośtam>();

No i pętla:

final Iterator<Cośtam> iterator = lista.iterator();
boolean czyPrzejść = true;
while (czyPrzejść && iterator.hasNext()) {
  czyPrzejść &= iterator.next().odpal();
}

Lub ewentualnie:

for (final Cośtam cośtam : lista) {
  if (!cośtam.odpal()) {
    break;
  }
}
0

dzieki

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