我在Java中有以下代码:
class Info {
@XmlAnyElement
@XmlElementRefs({@XmlElementRef(name="apple", type="Apple.class")})
final private List<Fruit> fruits = new ArrayList<Fruit>();
public Info() {
}
public List<Fruit> getFruits() {
return fruits;
}
}
public abstract class Fruit {
@XmlElement(name = "label", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
String name = null;
public Fruit() {
}
}
@XmlRootElement(name="apple")
public class Apple extends Fruit {
@XmlElement(name = "age", required = true)
int age;
public int getAge() {
return age;
}
}
<config>
<Info>
<apple>
<age>20</age>
</apple>
</Info>
</config>
然后在主课程中,我如何访问班级Apple
以获得苹果的年龄?
class Main() {
private List<Fruit> fruits = new ArrayList<Fruit>();
public void getAge() {
Info info = new Info();
fruits = info.getFruits();
}
}
所以在主类中,我们得到一个水果列表,但是如何访问Apple类的getAge()
方法?
答案 0 :(得分:2)
首先,请注意您无法确定Fruit
对象是Apple
的实例,并且您的fruits
对象不是单个Fruit
但是List<Fruit>
。
也就是说,假设您希望getAge
返回列表中第一个Apple
的年龄,您可以执行以下操作:
public void getAge() {
int age = -1;
for(Fruit f : fruits) {
if(f instanceof Apple) {
age = ((Apple)f).getAge();
}
}
}
答案 1 :(得分:0)
您可以在类Fruit:
中添加抽象方法public abstract class Fruit {
@XmlElement(name = "label", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
String name = null;
public abstract int getAge();
public Fruit() {
}
}