你可以使用反射和調用參數遞歸
import java.lang.Object;
import java.lang.reflect.Method;
的所有制定者...
class Filter {
public void setMask(Mask mask){
System.out.println("Mask set");
}
public void doSmth(){}
}
...
class Mask {
}
...
class PT_DSP {
public void setFilter(Filter filter){
System.out.println("Filter set");
}
public void doSmth(){}
}
...
public class SetterTest {
private PT_DSP def_PT = new PT_DSP();
@Test
public void init() throws InstantiationException, IllegalAccessException, InvocationTargetException {
initSetters(def_PT);
}
public void initSetters(Object next) throws IllegalAccessException, InstantiationException, InvocationTargetException {
Method[] methods = next.getClass().getMethods();
for(Method method : methods){
if (method.getName().contains("set")){
System.out.println(method.getName());
Class[] parameterTypes = method.getParameterTypes();
// parameters of setter
List<Object> parameters = new ArrayList<>();
for (Class type : parameterTypes) {
// generate new instance of parameter
Object object = type.newInstance();
// add parameter, for setter call later on
parameters.add(object);
// call recursive for parameter setters
initSetters(object);
}
// call setter, with new instane of target
method.invoke(next.newInstance(), parameters.toArray());
}
}
}
}
使用setfilter
setMask
Mask都設置
過濾器設置
來源
2016-03-16 10:48:10
jam
這裏的問題是,你想調用其他類的setter方法。如果所有的setter都在一個類中,也許這對於Apache BeanUtils是可行的。但是這樣更復雜。 –
方法不需要初始化,但是數據成員可以這樣做,並且根本沒有使用setter方法的方法已經有兩種方法。不清楚你在問什麼, – EJP