使用对象 属性 作为函数参数
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);
}
}
假设您有一个带有 .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);
}
}