我有一个对象" JudgesSubmission"使用以下方法:
public String getInnovationGrade1() {
return innovationGrade1;
}
public String getInnovationGrade2() {
return innovationGrade2;
}
public String getInnovationGrade3() {
return innovationGrade3;
}
public String getInnovationGrade4() {
return innovationGrade4;
}
现在,在调用这些方法时,我想将它们放在一个循环中,其中被调用的方法名称获取附加到其末尾的循环的索引,从而更改所调用的方法。这可能吗? 例如,以下代码永远不会起作用,但我正在编写它以解释我需要的内容:
judgesSubmission metricScores= new judgesSubmission;
int metricSum=0;
for (int i=0;i<4;i++){
metricSum=metricSum
Integer.parseInt(metricScores.getInnovationGrade+"i"());
}
有没有办法做到这一点,还是我总是写出完整的方法名称?
答案 0 :(得分:2)
你想做的事情是不可能的......但是反思如下:
MyObject.class.getMethod("mymethod"+i);
如果没有反思,您可以使用Supplier<String>
:
public void process(Supplier<String>... suppliers){
judgesSubmission metricScores= new judgesSubmission;
int metricSum=0;
for (Supplier<String> supplier : suppliers){
Integer.parseInt(supplier.get());
}
}
并将其称为:
MyObject myObject = new MyObject();
process(()->myObject.getInnovationGrade1(),
()->myObject.getInnovationGrade2(),
()->myObject.getInnovationGrade3(),
()->myObject.getInnovationGrade4());
答案 1 :(得分:2)
没有reflection(强烈不推荐)
是不可能的相反,您可能想要使用其他方法:
数据数组(替换4种方法,或另外)
one_d_pixel_vals = np.array([0.3, 0.4, 1.3, 3.4, 4.5, 4.2, 2.8, 2.4, 1.4, 0.1])
print(one_d_pixel_vals)
plt.plot(one_d_pixel_vals)
plt.yticks(np.arange(5))
plt.xticks(np.arange(9))
plt.grid(True)
plt.show()
one_d_fft = np.fft.fft(one_d_pixel_vals, norm='ortho')
print(one_d_fft)
print(len(one_d_fft))
>>> [ 6.57753753 +0.00000000e+00j -3.27588825 -6.42423464e-01j
0.01065311 +6.25512087e-01j 0.22429031 -4.34214340e-01j
0.25814049 -7.06019011e-02j -0.06324555 -1.12346671e-15j
0.25814049 +7.06019011e-02j 0.22429031 +4.34214340e-01j
0.01065311 -6.25512087e-01j -3.27588825 +6.42423464e-01j]
10
然后您可以使用
String[] getInnovationGrades()
{
return new String[]{innovationGrade1, innovationGrade2, innovationGrade3, innovationGrade4};
}
获取所需数据的参数
for(String innovationGrade : getInnovationGrades())
//do stuff
然后您可以使用
String getInnovationGrade(int i)
{
switch(i)
{
case 1:
return getInnovationGrade1();
case 2:
return getInnovationGrade2();
case 3:
return getInnovationGrade3();
case 4:
return getInnovationGrade4();
default:
return ""; //or throw exception, depends on how you wish to handle errors
}
}