假设我有一个名为Character
的{{1}}类的属性/字段,它基本上是两个坐标:
position
让我们说我希望角色能够互动,当且仅当他们的位置完全相同时,如下所示:
public class Character {
int[][] position;
public Character(int[][] position) {
this.position = position;
}
}
如何从该类中获取所有实例化对象的数组,即上面的public void interact() {
for character in all_characters {
if (this.position = character.position) {
// Do something
}
}
}
。
答案 0 :(得分:1)
关于获取属性。 如果它不是私有的,它应该是可用的。 在java中,有一种做法是将属性设为私有,并为它们实现公共getter方法。 让我举个例子。
关于比较。
我建议尝试使用deepEquals
类的Arrays
静态方法。
http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#deepEquals(java.lang.Object[],%20java.lang.Object[])
file Character.java
public class Character {
private int[][] position;
public Character(int[][] position) {
this.position = position;
}
public int[][] getPosition() {
return position;
}
}
file Worker.java
public class Worker {
List<Character> all_characters = new ArrayList<Character>();
// all_characters.add(ch1);
// all_characters.add(ch2);
// all_characters.add(chN);
public void interact() {
for (chLeft in all_characters) {
for (chRight in all_characters) {
if(java.util.Arrays.deepEquals(chLeft.getPosition(), chRight.getPosition())) {
// Let's interact :)
}
}
}
}
答案 1 :(得分:0)
这不是自动完成的。您必须跟踪实体,可能使用接口对它们进行装饰以便能够跟踪这些内容,例如:
class Position
{
private int[][] data;
public boolean equals(Position other) { .. }
}
interface Positionable
{
public Position getPosition();
}
class Character implements Positionable
{
private Position position;
@Override public Position getPosition() { return position; }
}
class EntityGroup
{
List<Positionable> entities;
public Optional<Positionable> findEntityInSamePosition(Positionable p) {
return entities.stream().filter(p2 -> !p.equals(p2) && p.getPosition().equals(p2.getPosition())).findfirst();
}
}