使用对象 属性 作为函数参数

Using object property as function parameter

假设您有一个带有 .x 和 .y 的 Point myPoint 对象 属性。您将如何编写使用 myPoint.x 或 myPoint.y 作为输入并乘以对象中 .x 或 .y 的值的函数 void multiply()。请记住,问题是能够输入对象的 myPoint.x、.y、.z 或任何 属性 并将结果保存在 myPoint.whatever 变量中。这将是 class:

Point{
 int x,y;

 //Im ignoring the constructor

 void multiply(int Point.x number, int factor) //Being int Point.x or .y my problem
  number*=factor; //saving the value of number in Point.x
}

您只需在函数中引用 x 和 y:

void multiply(int factor) { 
    this.x *= factor; 
    this.y *= factor; 
}

如果您想要专门考虑某些字段的方法,我建议您使用明确说明的方法调用:

void multiplyX(int factor) { 
    this.x *= factor; 
}

如果您只想分解一个在调用函数时指定的特定变量,那可能不是您真正想要做的事情。你可以用 lambda 来做,如果你想让我编辑这个问题来解释这一点,请发表评论;但从 API 和维护的角度来看,这似乎比它值得的麻烦要多得多。

Java 没有 pointers/references 原始(非对象)值。您可以通过定义用于访问值的 接口 来模拟它们:

public interface IntAccess {
  void set(int);
  int get();
}

public class Point {
  int x,y;

  IntAccess accessX() {
    return new IntAccess() {
      public void set(int v) {x=v;}
      public int get() {return x;}
    }
  }
  IntAccess accessY() {
    return new IntAccess() {
      public void set(int v) {y=v;}
      public int get() {return y;}
    }
  }

  public static void multiply(IntAccess i,int f) {i.set(i.get()*f);}
}

class Client {
  static void test() {
    Point p=new Point();
    Point.multiply(p.accessX(),3);
    Point.multiply(p.accessY(),4);
  }
}

或者,您可以将字段设为 objects:

public class Multiplyable {
  int v;
  public void multiply(int f) {v*=f;}
}

public class Point {
  public Multiplyable x,y;
}

class Client {
  static void test() {
    Point p=new Point();
    p.x.multiply(3);
  }
}