假设我有一个包含许多不同种类对象的项目,但它们都有一个实例变量X,我如何创建一个接受任何类型对象的方法,然后返回X?
虚拟代码示例:
class Car{
int X =19;
}
class Apple{
int X =21;
}
class Bee{
int X =32;
}
public int GetX(Object ANY_OBJECT_HERE){
return ANY_OBJECT_HERE.X;
}
答案 0 :(得分:3)
您有2个选项。
使用一种返回Xholder
的{{1}}方法创建一个界面,例如getX()
。通过返回int
,Car
,Apple
和Bee
实施Xholder
。然后,您当前的X
方法是不必要的;任何可能调用GetX
的内容现在都会调用GetX(yourObject)
。
在yourObject.getX()
中使用反射。使用GetX
获取对象的课程,并使用getClass()
获取课程Field
,并传递变量名称getField
。从那里你可以获得价值。
第一个选项是最好的,因为反射速度较慢且容易出错。
答案 1 :(得分:2)
脱离我头顶的两种方式:
话虽如此,你的方法接口是不正确的:你不要指望任何对象,而只指那些拥有那个X属性的对象。这意味着从设计的角度来看,第一个解决方案是最正确的。
答案 2 :(得分:0)
使所有类扩展自基础抽象类(包含X的Say MyObject)并使GetX参数类型为MyObject。
答案 3 :(得分:0)
假设您知道可以通过使用接口或抽象方法(抽象类)的多态概念来实现此目的;
您可以使用Java Reflections解决此问题。您可以更多地了解它here
答案 4 :(得分:0)
为什么不直接使用java.lang.Object作为参数?