如何从其实例字段java中获取对象?

时间:2017-04-09 14:37:07

标签: java reflection

假设我有两类动物和食物:

   public class Animal {
        String animalName = "";
        Food animalFood;
        public Animal(String animalName, Food food) {
            this.animalFood = animalFood;
            this.animalName = animalName;
        }
    }

    public class Food {
        String foodType;
        String foodName;
        public Food(String foodType, String foodName) {
            this.foodName = foodName;
            this.foodType = foodType;
        }
    }

    public static void main(String[] args) {
        Food dogFood = new Food("meat", "beef");
        Animal animal = new Animal("Max", dogFood);
        //problem: get animal from dogfood
    }

无论如何,通过Reflection或其他方式从其字段中获取类的实例(假设您可以访问字段)? 编辑:示例显然不是真正的问题,所以假设我只有dogfood实例,该实例是从Animal(在这种情况下为animal)的任意实例中创建的我从中得到了动物?

1 个答案:

答案 0 :(得分:1)

你想要做的是:

给出

public class Animal {
        String animalName = "";
        Food animalFood;
        public Animal(String animalName, Food food) {
            this.animalFood = animalFood;
            this.animalName = animalName;
        }
    }

然后像

public static void main(String[] args) {
        Food dogFood = new Food("meat", "beef");
        doSomethingWithAnimal(new Animal("Max", dogFood)); // <-- anonymous creation of an Animal
        //problem: get animal from dogfood
        Animal theAnonymousAnimal = //get it via reflection from dogFood
    }

不,这是不可能的。 Food不包含对Animal的引用,因此您不能。如果Food有一个Animal字段,并且在Animal构造函数中设置了该引用,那么是的,您可以通过正常反射。