Sto lavorando al mio primo vero progetto con Java. Sto iniziando a sentirmi a mio agio con la lingua, anche se ho più esperienza con i linguaggi dinamici.Metaprogramming Java
ho una classe che si comportano simile al seguente:
class Single
{
public void doActionA() {}
public void doActionB() {}
public void doActionC() {}
}
E poi ho una classe di SingleList
che agisce come un insieme di queste classi (in particolare, è per una libreria 2D Sprite, e la " azioni "sono tutti i tipi di trasformazioni: rotazione, taglio, scala, ecc.). Voglio essere in grado di effettuare le seguenti operazioni:
class SingleList
{
public void doActionA() {
for (Single s : _innerList) {
s.doActionA();
}
}
... etc ...
}
Esiste un modo per rinviare semplicemente un metodo (o un elenco noto di metodi) per ciascun membro della lista interna? In qualche modo senza dover elencare in modo specifico ciascun metodo, quindi eseguire il ciclo di ciascun membro interno e applicarlo manualmente?
Per rendere le cose un po 'più difficili, i metodi sono di varia natura, ma sono tutti di tipo restituito "vuoto".
Penso che si può dare un'occhiata a Java riflessione, che consente di chiamare i metodi in fase di esecuzione. – Alvin
Ma avrei comunque bisogno di generare tutti gli stub del metodo nella classe SingleList. Sto cercando una soluzione che funzioni come metodo invocato catch-all. Molto simile al richiamo in PHP o in python getattr. – efritz
oh non è necessario attivarlo, con il riflesso si può fare SingleList.get ("someAttr"), quindi il riflesso chiamerà il metodo getSomeAttr() per te. Puoi Google "org.springframework.beans.BeanUtils", che fa quello che vuoi. Scriverò un esempio come risposta formale più tardi se nessuno mi picchia aha haha. – Alvin