假设我有两类动物和食物:
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
)的任意实例中创建的我从中得到了动物?
答案 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
构造函数中设置了该引用,那么是的,您可以通过正常反射。