有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将类的属性/字段与(所有)其他类进行比较

假设我有一个类Character的属性/字段,它叫做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
    }
  }
}

如何从该类中获取所有实例化对象的数组,即上面的all_characters


共 (2) 个答案

  1. # 1 楼答案

    关于获得财产。 如果不是私人的,应该可以使用。 在java中,有一种做法是将属性设置为私有,并为它们实现公共getter方法。 让我给你举个例子

    关于比较

    我建议尝试使用Arrays类的deepEquals静态方法。 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 :)
                    }
            }
        }
    
        }
    
  2. # 2 楼答案

    这不是自动完成的。您必须跟踪实体,可能会使用接口对其进行装饰,以便能够跟踪此类内容,例如:

    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();
    
      }
    }