Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中通过abstruct类访问子类?_Java_Xml_Abstract Class - Fatal编程技术网

如何在Java中通过abstruct类访问子类?

如何在Java中通过abstruct类访问子类?,java,xml,abstract-class,Java,Xml,Abstract Class,我有以下Java代码: class Info { @XmlAnyElement @XmlElementRefs({@XmlElementRef(name="apple", type="Apple.class")}) final private List<Fruit> fruits = new ArrayList<Fruit>(); public Info() { } public List<Fruit>

我有以下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类的
getAge()
方法呢?

首先,请注意,您不能确定您的
fruit
对象是
Apple
的一个实例,并且您的
fruits
对象不是一个
fruit
而是一个
列表

也就是说,假设您希望
getAge
返回列表中第一个
Apple
的年龄,您可以执行以下操作:

public void getAge() {
    int age = -1;
    for(Fruit f : fruits) {
        if(f instanceof Apple) {
            age = ((Apple)f).getAge();
        }
    }
}

您可以将抽象方法添加到类中:

public abstract class Fruit {
    @XmlElement(name = "label", required = true)
    @XmlJavaTypeAdapter(NormalizedStringAdapter.class)
    String name = null;

    public abstract int getAge();

    public Fruit() {
    }
}

将其投射到Apple,然后调用
getAge
?在这之前(应用投射),测试您正在处理的实例是否确实是一个Apple?如果您需要所有水果子类的age。没错!但如果父类中没有此方法,则没有从子类“访问”该方法的通用方法。
public abstract class Fruit {
    @XmlElement(name = "label", required = true)
    @XmlJavaTypeAdapter(NormalizedStringAdapter.class)
    String name = null;

    public abstract int getAge();

    public Fruit() {
    }
}