我有这段代码
library(reshape2)
melt(df2, id = 'id', na.rm = TRUE)
# id variable value
# 1 1 str1 NI
# 2 2 str1 FA
# 3 3 str1 FI
# 4 4 str1 FST
# 5 5 str1 FA
# 6 6 str1 IA
# 7 7 str1 NI
# 8 8 str1 IA
# 9 9 str1 IA
# 10 10 str1 FA
# 11 11 str1 IA
# 16 5 str2 NI
# 17 6 str2 FI
# 18 7 str2 DI
# 19 8 str2 NI
# 20 9 str2 FT
# 21 10 str2 FT
# 22 11 str2 FST
# 28 6 str3 IO
# 30 8 str3 IO
# 31 9 str3 FI
# 32 10 str3 FI
# 33 11 str3 FI
如何在类def_PT on(new ...())中为所有setter创建新实例,例如FOR循环? 或者我如何读取类中的所有setter以准备调用数组? 不是Bean方法。 THX
答案 0 :(得分:0)
如果你想这样做,请查看Method Chaining
并更改班级中的方法。有了它,你可以尝试做像
private PT_DSP def_PT = new PT_DSP().setVRTK(new VRTK().setFILTER(new FILTER()...);
在链接类中每个方法的方法中,总是返回当前实例,以便您可以使用它来调用其中的其他方法。
答案 1 :(得分:0)
你可以使用反射并调用参数的所有设置者递归
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
面具集
过滤器集