我有一个班级
public class Coordinates {
public int x,y,z;
public Coordinates (x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}
}
在另一个班级'方法我想访问坐标,但我必须为每个坐标x
,y
和z
执行相同的长代码。有没有办法为参数使用变量,如:
Coordinates coords0 = new Coordinates(1, 2, 3);
Coordinates coords1 = new Coordinates(4, 1, 3);
Coordinates coords2 = new Coordinates(5, 1, 3);
Coordinates coords3 = new Coordinates(1, 1, 3);
Coordinates coords4 = new Coordinates(1, 2, 0);
Set<Coordinates> set = new HashSet<Coordinates>();
set.add(coords0);
set.add(coords1);
set.add(coords2);
set.add(coords3);
set.add(coords4);
int sum = 0;
for (int i = 0; i < 3; i++) {
String param = "";
if(i == 0) param = "x";
if(i == 1) param = "y";
if(i == 2) param = "z";
Iterator<Coordinates> it = set.iterator();
while(it.hasNext()) {
Coordinates currentCoords = it.next();
sum += currentCoords.param;
}
}
这显然不起作用,但有没有办法实现与此类似的东西?
答案 0 :(得分:1)
据我所知,问题是您必须将相同的代码应用于坐标的集合,并且必须对所有x坐标执行相同的代码,然后对所有坐标执行坐标的y,然后是坐标的所有z。
所以你可能需要一个看起来像这样的方法:
private void complexCode(Collection<Coordinates> collection, ToIntFunction<Coordinates> axisAccessor) {
// ...
for (Coordinates c : collection) {
int axis = axisAccessor.applyAsInt(c);
//...
}
// ...
}
然后,您将使用
调用您的函数三次complexCode(collection, coordinates -> coordinates.x);
complexCode(collection, coordinates -> coordinates.y);
complexCode(collection, coordinates -> coordinates.z);
答案 1 :(得分:0)
您当前的尝试非常接近,只有您不需要param
变量println
(并根据评论消除i
值)。像,
Coordinates coords = new Coordinates(1, 2, 3);
System.out.println("Coordinate x is " + coords.x);
System.out.println("Coordinate y is " + coords.y);
System.out.println("Coordinate z is " + coords.z);
或格式稍有不同,并覆盖toString()
中的Coordinates
。哦,并修复构造函数。
public class Coordinates {
public int x, y, z;
public Coordinates(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
@Override
public String toString() {
return String.format("x=%d, y=%d, z=%d", x, y, z);
}
}
然后你可以print
喜欢
Coordinates coords = new Coordinates(1, 2, 3);
System.out.println("Coordinate " + coords);
答案 2 :(得分:-1)
你想要的是一个getter方法。创建setter方法也是个好主意。他们看起来像x的样子。您需要为y和z制作类似的方法。
public int getX(){
return x;
}
public void setX(int newX){
x = newX;
}
您可以在Coordinates类中创建这些,然后从您可以执行的其他课程中创建
if(i == 0) param = coords.getX();
答案 3 :(得分:-1)
你可以使用这样的反射:
int paramInt = Coordinates.class.getField(param).getInt(coords);
System.out.println("Coordinate "+param+" is "+paramInt);
唐&#39;吨