参考成员按参数名称?

use*_*559 1 java

假设我有一个这样的类:

class ASDF {
    int a;
    int b;
    int c;
}

ASDF[] myArray;
Run Code Online (Sandbox Code Playgroud)

还有一些相当大的ASDF阵列.有没有办法编写一个接受ASDF成员名称和ASDF数组的函数,并对给定成员名称的所有成员求和?

即,我想要一个像这样工作的函数:

sumMember(myArray, a);
Run Code Online (Sandbox Code Playgroud)

将返回ASDF中所有'a'成员变量的总和.但是,有三个以上的成员变量,因此为每个变量设置一个函数是不现实的.

ass*_*ias 6

你可以使用反射或地图或......

或者,如果你可以使用Java 8,你可以传递一个lambda来指向你感兴趣的成员.它不是你想要的那么短,但也不是太糟糕:

public static int sumMembers(ASDF[] array, ToIntFunction<ASDF> member) {
  return Arrays.stream(array).mapToInt(member).sum();
}
Run Code Online (Sandbox Code Playgroud)

样品用途:

public static void main(String[] args) {
  ASDF[] array = {new ASDF(), new ASDF()};
  array[0].a = 1;
  array[1].a = 2;

  //THIS IS HOW YOU CALL IT
  int sum = sumMembers(array, a -> a.a);
}
Run Code Online (Sandbox Code Playgroud)