【问题标题】:"Relative" class property referencing“相对”类属性引用
【发布时间】:2018-03-22 18:19:08
【问题描述】:

我想将类属性的“相对”引用作为参数传递。

首先,我不知道“相对引用”是否真的是这个的正确名称,但我的想法是这样的:

public ArrayList<Integer> getAllPropertyValues(someObjectClass.someInteger) { //someObjectClass.someInteger being the "relative reference"
    ArrayList<Integer> temp = new ArrayList<>();
    for (someObject x : someObjectList) {
        temp.add(x.someInteger);
    }
}

我们的想法是传递对(例如)Human.Age 的引用,并且该方法会将每个 x.Age 添加到列表中。

换句话说,给定一个对象x,如果我传递属性y,我就可以调用someDataType recievedProperty = x.y。不管哪种对象是xy 是什么类型。

有没有办法在 Java 中做到这一点?

【问题讨论】:

  • 澄清一下,您是否希望此方法将Human 的每个实例的Age 属性添加到列表中?
  • 让我编辑问题并使其更清晰

标签: java list class parameters


【解决方案1】:

我认为您可以使用接受 SomeObjectClass 并返回 intToIntFunction

 public ArrayList<Integer> getAllPropertyValues(ToIntFunction<SomeObjectClass> function) { 
    ArrayList<Integer> temp = new ArrayList<>();
    for (someObject x : someObjectList) {
        temp.add(function.apply(x));
    }
 }

你可以调用它:

ArrayList<Integer> results = getAllPropertyValues(SomeObjectClass::getAge);

您可以传递getAge()SomeObjectClass 的任何返回int 的方法。

【讨论】:

  • 这实际上就是我要找的东西!我将检查如何在通用方法上执行此操作!
  • 使用ToIntFunction&lt;SomeObjectClass&gt; 而不是仅仅使用Function&lt;SomeObjectClass, T&gt;T 是该方法的泛型类型参数是没有意义的,因为您将ints 存储在ArrayList&lt;Integer&gt; 中,从而对整数进行装箱。
  • @Federico Peralta Schaffne 你是对的。我承认出于同样的原因犹豫过。但我最终还是保持了这样,因为它让我觉得它更具可读性。事实上不是吗?
  • Alex Coronas 和 @Federico Peralta Schaffner 我将为返回的列表使用通用方式进行编辑。
  • @davidxxx 您不必编辑答案。它是清晰易懂的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 2012-06-30
  • 2016-10-09
  • 2020-04-09
  • 2012-06-27
  • 1970-01-01
相关资源
最近更新 更多