gpt4 book ai didi

java - 使用 JAXB 编码内部类 - Java

转载 作者:行者123 更新时间:2023-11-29 08:10:41 26 4
gpt4 key购买 nike

我遵循了以下关于 JAXB 的教程 http://blog.adamsbros.org/2010/02/07/jaxb-example-code/ ,并想修改它以包含我想要作为嵌套(内部)类的类,如下所示:

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.*;
import java.io.StringReader;
import java.io.StringWriter;

public class HighlevelClass
{


@XmlRootElement(name = "employee")
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee
{

@XmlAttribute
public int id;

@XmlElement
public
String firstName;

@XmlElement
public
String middleName;

@XmlElement
public
String lastName;

public Employee()
{
}

}

public static void main(String args[]) throws JAXBException
{

HighlevelClass HClass = new HighlevelClass();
Employee john = HClass.new Employee();
john.firstName = "John";
john.middleName = "Robert";
john.lastName = "Doe";
john.id = 1;

// write it out as XML
final JAXBContext jaxbContext = JAXBContext.newInstance(HighlevelClass.Employee.class);
}

但是当我尝试创建 JAXB 上下文时,它在最后一行给出了一个错误。我尝试了多种组合,但只有在将 Employee 类设为静态时才能编译它。有人可以帮我了解出了什么问题吗。

谢谢。

最佳答案

main() 方法是静态的,因此它只能访问类的静态成员。这不是 JAXB 问题。这就是语言的工作方式。

内部类是一种成员。非静态内部类可以调用外部类的非静态方法,即可以访问外部类实例(直接使用'HighlevelClass.this'或间接调用方法或访问字段)。

这就是为什么您必须将内部类定义为静态的。如果你不想这样做,你可以让你的类成为一个普通的顶级类,或者将你的 jaxb 代码移动到实例方法并在使用它之前创建你的类的实例:

public static void main(String args[]) throws JAXBException {
new HighlevelClass().jaxbTest();
}


private void jaxbTest() throws JAXBException {

HighlevelClass HClass = new HighlevelClass();
Employee john = HClass.new Employee();
john.firstName = "John";
john.middleName = "Robert";
john.lastName = "Doe";
john.id = 1;

// write it out as XML
final JAXBContext jaxbContext = JAXBContext.newInstance(HighlevelClass.Employee.class);
}

关于java - 使用 JAXB 编码内部类 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8284342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com