java - 通过参数名称引用成员?

标签 java

假设我有这样一个类:

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

ASDF[] myArray;

以及一些大小的 ASDF 数组。有什么方法可以编写一个函数,它接受 ASDF 成员的名称和 ASDF 的数组,并对给定成员名称的所有成员求和?

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

sumMember(myArray, a);

将返回 ASDF 中所有“a”成员变量的总和。虽然成员变量多于三个,因此为每个成员变量分配一个函数是不现实的。

最佳答案

您可以使用反射或贴图或...

或者,如果您可以使用 Java 8,则可以传递一个 lambda 以指向您感兴趣的成员。它没有您想要的那么短,但也不错:

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

示例使用:

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);
}

关于java - 通过参数名称引用成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24210850/

相关文章:

java - Eclipse 在服务器上调试/运行

java - Java EE 中的事务管理(两阶段提交协议(protocol))

java - 处理大数据集时减少内存流失

java - 套接字:BufferedReader/InputStream 和 BufferedWriter/OutputStream 不起作用

java - 如何将 StringBuffer 的最后一个字符传输到开头?

java - 从 Spark Java API 中的参数类型创建 DataType

java - 媒体应用程序缓冲时间太长

java - hibernate.id.new_generator_mappings被glassfish忽略了吗?

java - 如何使用listFilesAndDirs只获取目录而不进行递归操作

java - Android:删除 ListView 中某些列表项的分隔符